我想获得一个具有不同状态的数据透视表,并使用SQL查询从没有准备好的数据透视表的表中计算天数。 我尝试使用UNION ALL来插入列,但是查询太长而且不实用且效率不高。
Status |date
-------------
New |25/2/2017
Confirm |29/1/2017
Status
-------
New
Confirm
Finish
Status | 0-7|8-14|15-21|<30 ---->Days
------------------------------
New | 1 | 0 | 0 | 1
Confirm| 0 | 0 | 0 | 1
Finish | 0 | 0 | 0 | 0
解决
使用左连接状态表和数据表,然后使用case语句和pivot来解决它。感谢所有试图帮助我的人^^
答案 0 :(得分:0)
使用下面符合您要求的代码。 我使用了日期格式:DDMMYYYY
--Create Table
CREATE TABLE A (Status Varchar(20),DT Date)
--Insert data
INSERT INTO A (Status,DT) VALUES ('New','2/25/2017')
INSERT INTO A (Status,DT) VALUES ('Confirm','01/29/2017')
INSERT INTO A (Status,DT) VALUES ('Finish','01/2/2017')
-- Query to get output
Select Status
,(Select CASE WHEN DATEPART(Day,b.DT) <=7 THEN 1 ELSE 0 END from A b WHERE b.Status = a.Status) as '0-7'
,(Select CASE WHEN DATEPART(Day,b.DT) <=14 and DATEPART(Day,b.DT)>7 THEN 1 ELSE 0 END from A b WHERE b.Status = a.Status) as '8-14'
,(Select CASE WHEN DATEPART(Day,b.DT) <=21 and DATEPART(Day,b.DT)>14 THEN 1 ELSE 0 END from A b WHERE b.Status = a.Status) as '15-21'
,(Select CASE WHEN DATEPART(Day,b.DT) <=30 and DATEPART(Day,b.DT)>21 THEN 1 ELSE 0 END from A b WHERE b.Status = a.Status) as '<30'
from A a