【发布时间】:2010-03-03 21:28:18
【问题描述】:
我编写了一个查询,它根据给定的日期范围对每小时的行数进行分组。
SELECT CONVERT(VARCHAR(8),TransactionTime,101) + ' ' + CONVERT(VARCHAR(2),TransactionTime,108) as TDate,
COUNT(TransactionID) AS TotalHourlyTransactions
FROM MyTransactions WITH (NOLOCK)
WHERE TransactionTime BETWEEN CAST(@StartDate AS SMALLDATETIME) AND CAST(@EndDate AS SMALLDATETIME)
AND TerminalId = @TerminalID
GROUP BY CONVERT(VARCHAR(8),TransactionTime,101) + ' ' + CONVERT(VARCHAR(2),TransactionTime,108)
ORDER BY TDate ASC
显示如下内容:
02/11/20 07 4
02/11/20 10 1
02/11/20 12 4
02/11/20 13 1
02/11/20 14 2
02/11/20 16 3
给出交易数量和一天中的给定时间。
如何显示一天中的所有时间 - 从 0 到 23,并为没有值的时间显示 0?
谢谢。
更新
使用下面的 tvf 对我有用一天,但我不确定如何使它适用于某个日期范围。
使用 24 小时临时表:
-- temp table to store hours of the day
DECLARE @tmp_Hours TABLE ( WhichHour SMALLINT )
DECLARE @counter SMALLINT
SET @counter = -1
WHILE @counter < 23
BEGIN
SET @counter = @counter + 1
--print
INSERT INTO @tmp_Hours
( WhichHour )
VALUES ( @counter )
END
SELECT MIN(CONVERT(VARCHAR(10),[dbo].[TerminalTransactions].[TransactionTime],101)) AS TDate, [@tmp_Hours].[WhichHour], CONVERT(VARCHAR(2),[dbo].[TerminalTransactions].[TransactionTime],108) AS TheHour,
COUNT([dbo].[TerminalTransactions].[TransactionId]) AS TotalTransactions,
ISNULL(SUM([dbo].[TerminalTransactions].[TransactionAmount]), 0) AS TransactionSum
FROM [dbo].[TerminalTransactions] RIGHT JOIN @tmp_Hours ON [@tmp_Hours].[WhichHour] = CONVERT(VARCHAR(2),[dbo].[TerminalTransactions].[TransactionTime],108)
GROUP BY [@tmp_Hours].[WhichHour], CONVERT(VARCHAR(2),[dbo].[TerminalTransactions].[TransactionTime],108), COALESCE([dbo].[TerminalTransactions].[TransactionAmount], 0)
给我一个结果:
TDate WhichHour TheHour TotalTransactions TransactionSum
---------- --------- ------- ----------------- ---------------------
02/16/2010 0 00 4 40.00
NULL 1 NULL 0 0.00
02/14/2010 2 02 1 10.00
NULL 3 NULL 0 0.00
02/14/2010 4 04 28 280.00
02/14/2010 5 05 11 110.00
NULL 6 NULL 0 0.00
02/11/2010 7 07 4 40.00
NULL 8 NULL 0 0.00
02/24/2010 9 09 2 20.00
那么我怎样才能让它正确分组呢?
另一个问题是,有几天没有交易,这几天也需要出现。
谢谢。
【问题讨论】:
-
您要报告多少天/哪天的小时数?
-
对于@start/@enddate 范围
标签: sql-server tsql count group-by