每小时的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。也许你能提供一个更好的答案?