如果你们能帮助我弄清楚如何: 根据时间在单个列上选择12个单独的计数(对于一个日期,我假设通过首先在顶部的声明日期,然后插入时间,我认为我理解的部分)第二个是一次建立12个单独的案例 运行它们3次,这样你就可以在3个独立的IDS上获得12个计数。
所有这些都在一张桌子里。
我认为它可行的方式但不是
Declare @Date DATE
set @Date = '24-11-2015'
Select (case(Select statement here) where Projectid in()) as A,
(case(Select statement here) where Projectid in()) as B,
(case(Select statement here) where Projectid in()) as C
如果有人理解我的意思,如果你能帮助我,我将不胜感激。
输入数据:
Project id Datetime Necessary
---------- ----------------------- ---------
5 11-23-2015 09:00:00.000 1
5 11-23-2015 10:00:00.000 1
6 11-23-2015 11:00:00.000 0
1 11-23-2015 12:00:00.000 1
3 11-23-2015 13:00:00.000 1
124 11-23-2015 14:00:00.000 1
124 11-23-2015 15:00:00.000 1
124 11-23-2015 16:00:00.000 0
576 11-23-2015 17:00:00.000 0
576 11-23-2015 18:00:00.000 1
576 11-23-2015 19:00:00.000 1
etc 11-23-2015 20:00:00.000 1
预期产出:
Datetime 5 124 576
------------- --- --- ---
09:00 - 09:59 0 4 5
10:00 - 10:59 4 3 1
11:00 - 11:59 5 2 1
12:00 - 12:59 1 1 1
13:00 - 13:59 6 1 1
14:00 - 14:59 6 1 1
15:00 - 15:59 7 1 2
16:00 - 16:59 8 1 3
17:00 - 17:59 9 1 3
18:00 - 18:59 1 1 2
19:00 - 19:59 12 1 0
20:00 - 20:59 0 0 0
我正在寻找的是projectids 5 124和576作为列变量 应该计算行的方式基于每小时的时间。
到目前为止,在Salman A的帮助下我得到了什么
Hour 5 124 576
8 9 0 1
9 0 11 10
10 4 8 15
11 0 10 7
12 1 4 17
13 6 18 6
14 2 5 27
15 4 1 43
16 4 11 40
17 3 11 3
18 6 2 9
19 9 5 7
答案 0 :(得分:1)
如果我理解正确,您需要使用值0...11
(tricks discussed here)加入您的表格,然后点按COUNT(CASE...)
。
SELECT
master..spt_values.number AS [Hour of Day],
COUNT(CASE WHEN projectid IN (1, 2) THEN 1 END) AS [Project 1 and 2],
COUNT(CASE WHEN projectid IN (3, 4) THEN 1 END) AS [Project 3 and 4],
COUNT(CASE WHEN projectid IN (5, 6) THEN 1 END) AS [Project 5 and 6]
FROM master..spt_values
LEFT JOIN yourtable ON master..spt_values.number = DATEPART(HOUR, yourdatetime)
WHERE master..spt_values.number BETWEEN 0 AND 11 AND master..spt_values.type = 'p'
GROUP BY master..spt_values.number
ORDER BY master..spt_values.number