簡體   English   中英

SQL查詢按小時細分銷售

[英]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) 

如果我的理解正確,您只需將小時數添加到selectgroup 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM