每天的SQL计数状态

时间:2017-12-05 10:33:38

标签: sql sql-server

相当新的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

谢谢!

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