2017-12-05 3 views
0

Ziemlich neu zu SQL, aber ich bin auf der Suche nach Hilfe bei der Organisation einiger Daten. Lassen Sie mehrere Status in verschiedene Spalten mit Datum/Uhrzeit aufgeteilt werden und möchten Sie in der Lage sein, sie zu schwenken, um den unterschiedlichen Status an jedem Tag aufzuschlüsseln.SQL Count-Status für jeden Tag

beispielsweise die folgenden Daten:

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  

Würde eine Tabelle wie die Rückkehr unter den Grenzen der höchsten und der niedrigsten Datum in 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 

Vielen Dank!

+2

Ich bin verwirrt, wo die Ergebnismenge herkommt. Wie werden diese berechnet? – kchason

+0

Woher kommen 1, 2 und 3? –

Antwort

0

Wenn man sich immer zählt gegen jeden Tag suchen, versuchen Sie diesen Code.
Bitte beachten Sie, dass Sie eine dynamische Abfrage schreiben müssen, wenn die Anzahl der Statusspalten dynamisch/unbekannt ist.

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