[英]SQL query breakdown the sales by each hour
我有一個如下查詢,它將返回今天的每個遠程服務器銷售結果如下
datebooking NameOfDay ORC CWP TC TotalBooking EmailSent EmailNotSent
20150524 Sunday 447 144 272 1441 1441 0
實際上,我將日期簿縮減為8個數字
我的問題是我可以按小時返回每個遠程銷售服務器故障嗎? 想象一天將有24行詳細信息,而不是每天一行,這意味着在預訂日期下,我們將按這種格式20150524從凌晨12點至凌晨1點銷售,凌晨2點至凌晨3點,依此類推? 如何根據當前查詢完成此查詢?
SELECT
Convert(char(8), OrderH_dtmInitiated, 112)as datebooking,
Datename (weekday, OrderH_dtmInitiated) As NameOfDay,
--count(distinct OrderH_strCinemaId)as Cinemasite,
SUM(case when OrderH_strCinemaId like '1101' then 1 else 0 end)as ORC,
SUM(case when OrderH_strCinemaId like '1102' then 1 else 0 end)as CWP,
SUM(case when OrderH_strCinemaId like '1104' then 1 else 0 end)as TC,
count(distinct OrderH_intID)as TotalBooking,
SUM(case when OrderH_strEmailConfirmationSent like 'Y' then 1 else 0 end) as EmailSent,
SUM(case when OrderH_strEmailConfirmationSent is NULL then 1 else 0 end) as EmailNotSent
FROM [VISTAIT].[dbo].[tblOrderHistory]
WHERE OrderH_dtmInitiated >= (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE() )))
GROUP BY Convert(char(8), OrderH_dtmInitiated, 112), Datename (weekday, OrderH_dtmInitiated )
ORDER by Convert(char(8), OrderH_dtmInitiated, 112)
如果我的理解正確,您只需將小時數添加到select
和group by
:
SELECT Convert(char(8), OrderH_dtmInitiated, 112) as datebooking,
datename(hour, OrderH_dtmInitiated) as hourbooking,
. . .
FROM . . .
GRUOP BY Convert(char(8), OrderH_dtmInitiated, 112),
datename(hour, OrderH_dtmInitiated)
假設OrderH_dtmInitiated
實際上具有時間信息。
另一種方法是使用包含小時的日期/時間格式,因此很容易將其放在一個字段中:
SELECT Convert(char(13), OrderH_dtmInitiated, 121) as datebooking,
. . .
FROM . . .
GROUP BY Convert(char(13), OrderH_dtmInitiated, 121)
格式將為“ YYYY-MM-DD HH”。
編輯:
如果您希望在一個小時內使用上午/下午,則最簡單的方法可能是一個明確的case
:
SELECT Convert(char(8), OrderH_dtmInitiated, 112) as datebooking,
(CASE WHEN datename(hour, OrderH_dtmInitiated) < '12'
THEN datename(hour, OrderH_dtmInitiated) + ' AM'
ELSE datename(hour, OrderH_dtmInitiated) + ' PM'
END) as hourbooking,
. . .
FROM . . .
GRUOP BY Convert(char(8), OrderH_dtmInitiated, 112),
datename(hour, OrderH_dtmInitiated)
注意:我非常有意地僅使用datename()
編寫了邏輯。 這樣,整個case
語句就不必在group by
子句中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.