每小时的SQL数据透视表
我有如下表格每小时的SQL数据透视表,sql,pivot,Sql,Pivot,我有如下表格 Prefix scandate A 1/2/2013 08:30 A 1/2/2013 08:45 B 1/2/2103 09:15 我需要每小时计数的输出I,e Time A B 08:30-09:30 2 0 09:30-10-30 0 1 到晚上7点 有人能帮我吗根据您使用的数据库,类似这样的功能应该可以工作: SELECT SUM(CASE W
Prefix scandate
A 1/2/2013 08:30
A 1/2/2013 08:45
B 1/2/2103 09:15
我需要每小时计数的输出I,e
Time A B
08:30-09:30 2 0
09:30-10-30 0 1
到晚上7点
有人能帮我吗根据您使用的数据库,类似这样的功能应该可以工作:
SELECT
SUM(CASE WHEN DATEPART(hh, DATEADD(m, 30, scandate) = 1 THEN 1 ELSE 0 END) As '00:30 - 01:30 Block'
SUM(CASE WHEN DATEPART(hh, DATEADD(m, 30, scandate) = 2 THEN 1 ELSE 0 END) As '01:30 - 02:30 Block'
SUM(CASE WHEN DATEPART(hh, DATEADD(m, 30, scandate) = 3 THEN 1 ELSE 0 END) As '02:30 - 03:30 Block'
...
FROM table
您只需在晚上7点之前迭代小时部分标识符,即1、2、…19。注意,这在凌晨12:30之前的任何时候都不起作用。在MySQL中,您可以这样做:
SELECT
CONCAT(
HOUR(SUBTIME(scandate, '00:30:00')), ':30',
'-',
HOUR(ADDTIME(scandate, '00:30:00')), ':30') AS time,
SUM(IF(prefix = 'A', 1, 0)) AS A,
SUM(IF(prefix = 'B', 1, 0)) AS B
FROM tableName
WHERE TIME(scandate) <= '19:00:00'
GROUP BY HOUR(SUBTIME(scandate, '00:30:00'));
选择
海螺(
小时(子时间(斯堪的纳特,'00:30:00'),':30',
'-',
小时(ADDTIME(scandate,'00:30:00'),':30')作为时间,
总和(如果(前缀='A',1,0))作为,
和(如果(前缀='B',1,0))为B
从表名
WHERE TIME(scandate)我刚刚为oracle和days回答了这个问题>>欢迎来到Stack Overflow!请通过添加适当的标记(Oracle、SQL Server、MySQL等)来指定目标RDBMS。可能有一些答案利用了并非普遍支持的语言或产品功能。此外,通过使用特定的RDBMS标记,您的问题可能会受到更适合回答它的人的注意。错误地使用了COUNT而不是SUM。也许你能提供一个更好的答案?