2015-11-19 21 views
0

我正在通過SQL查詢從SQL表確認小時報表。查詢絕對運行良好,並給出正確的結果如下:如何在SQL中按小時報表打印小時值

SELECT DATEPART(hh, CONFIRMATION.DATECOMPLETE) AS hour, sum(CONFIRMATION.QUANTITY) Units 
FROM CONFIRMATION 
WHERE CONFIRMATION.DATECOMPLETE >= '11/18/2015' 
GROUP BY DATEPART(hh, CONFIRMATION.DATECOMPLETE) 

我想換個小時有follwoing,而不是小時數:

Hour     Units 
10:00 - 11:00   4 
11:00-12:00   8 

我怎樣才能做到這一點?

感謝

回答

1

當把日期部分採用串聯在一起,datename()datepart()好得多:

SELECT (DATENAME(hour, c.DATECOMPLETE) + ':00-' + 
     DATENAME(hour, DATEADD(hour, 1, c.DATECOMPLETE)) + ':00' 
     ) as period, 
     SUM(c.QUANTITY) as Units 
FROM CONFIRMATION c 
WHERE c.DATECOMPLETE >= '2015-11-18' 
GROUP BY (DATENAME(hour, c.DATECOMPLETE) + ':00-' + 
      DATENAME(hour, DATEADD(hour, 1, c.DATECOMPLETE)) + ':00' 
     ); 

另外:

  • 使用ISO標準的日期格式。 YYYY-MM-DD或YYYYMMDD。
  • 表別名使查詢更易於編寫和閱讀。
2

您可以將日期時間的小時部分轉換爲字符串格式化10:00-11:00。然後,您可以通過在小時分量上加1來計算結束時間,並在午夜時分模數24進行換行。

CONVERT(varchar(2),DATEPART(hh,CONFIRMATION.DATECOMPLETE)) + ':00-' + CONVERT(varchar(2), (DATEPART(hh,CONFIRMATION.DATECOMPLETE)+1) % 24) + ':00'