2016-04-22 11 views
0

Ich habe drei Algorithmen, die einmal am Tag um 7 Uhr morgens laufen. Jeder dieser Algorithmen schreibt seine Ergebnisse in eine Tabelle. Jeder Algorithmus schreibt nämlich seine Result, die Date des Ergebnisses und seine ID Beschreibung. Also, jeden Tag werden drei Zeilen der Tabelle hinzugefügt, wie folgt aus:SQL - Gegebene Tabelle mit drei Einträgen pro Tag, wie man neue Tabelle mit einem Entriegel pro Tag und drei Spalten schreibt

ID Result Date 
A  35  21/04/2016 
B  27  21/04/2016 
C  31  21/04/2016 

Für eine verbesserte Lese, habe ich jetzt eine zweite Tabelle produzieren wollen, wo die Einträge für den gleichen Tag in der gleichen Datensatz gespeichert, wie die folgenden:

Date   A  B  C 
21/04/2016 35 27 31 

Können Sie bitte helfen?

(SQL Server 2012)

+1

Sie können diese Ergebnisse jederzeit mit einer Pivot-Abfrage erhalten. Ihr aktueller Plan berücksichtigt nicht die Tatsache, dass ID = D in der Zukunft auftreten könnte. –

+1

PIVOT, PIVOT, PIVOT. – qxg

+0

Danke für Ihre Tipps. Ich werde die PIVOT-Abfrage überprüfen. – Eduardo

Antwort

1

Hier ist eine einfache Demo der Vollständigkeit der Antworten PIVOT Lösung. Ich finde die PIVOT Lösung eleganter, die bedingte Aggregation, aber es geht um den Preis von weniger anpassungsfähig.

DECLARE @T TABLE (ID CHAR(1), Result INT, Date DATE); 
INSERT @T (ID, Result, Date) 
VALUES ('A', 35, '2016-04-21'), ('B', 27, '2016-04-21'), ('C', 35, '2016-04-21'); 

SELECT pvt.Date, pvt.A, pvt.B, pvt.C 
FROM @T AS T 
     PIVOT (MAX(Result) FOR ID IN (A, B, C)) AS pvt; 

RESULT

Date  A B C 
----------------------- 
2016-04-21 35 27 35 
1

Dies ist eine Pivot-Abfrage. Sie können eine explizite pivot verwenden. Ich denke, bedingte Aggregation leicht genug ist:

select date, 
     max(case when id = 'A' then result end) as a, 
     max(case when id = 'B' then result end) as b, 
     max(case when id = 'C' then result end) as c 
from t 
group by date 
order by date; 
Verwandte Themen