相当新的SQL,但我正在寻找组织一些数据的帮助。将几个状态分成具有日期/时间的不同列,并希望能够将它们转动以分析每天的不同状态。
例如以下数据:
Status4 Status5 Status6 Status7
12/1/17 5:46 NULL NULL NULL
11/30/17 14:53 11/30/17 14:53 11/30/17 14:53 11/30/17 14:54
11/18/17 4:50 11/18/17 4:48 11/18/17 4:48 NULL
将返回一个如下所示的表,其中Status4中存在最高和最低日期的界限。
Status4 Status5 Status6 Status7
11/18/17 1 1 1 0
11/30/17 2 2 2 1
12/1/1 3 2 2 1
谢谢!
答案 0 :(得分:0)
如果您要查看每个日期的计数,请尝试此代码 请注意,如果状态列的数量是动态/未知,则必须编写动态查询。
DECLARE @TempDates As Table (DateValues Date)
/*Table1 is the table having your status columns */
Insert into @TempDates
Select Convert(Date,Status1) from Table1
Union
Select Convert(Date,Status2) from Table1
Union
Select Convert(Date,Status3) from Table1
Union
Select Convert(Date,Status4) from Table1
SELECT * FROM
(
SELECT COL, VAL, DateValues FROM Table1
CROSS APPLY (VALUES (Convert(Date,Status1),'Status1'),
(Convert(Date,Status2),'Status2'),
(Convert(Date,Status3),'Status3'),
(Convert(Date,Status4),'Status4')) CS (COL,VAL)
RIGHT JOIN @TempDates tp ON tp.DateValues = CS.COL
)T
PIVOT
(
COUNT(COL)
FOR VAL in ([Status1],[Status2],[Status3],[Status4])
) P
WHERE Datevalues IS NOT NULL