Dies scheint mir eine triviale Aufgabe zu sein, aber aufgrund (wahrscheinlich) mangelndem Verständnis des Schwenkmechanismus habe ich Probleme, eine Lösung dafür zu finden.Drehtische mit verwandten Spalten
Ich habe die folgende Tabelle mit Beispieldaten:
id code created_datetime sourceID
------ ---- ------------------- --------
481792 DEF 2016-12-04 18:31:00 398464
481792 JKH 2016-12-04 18:31:00 398464
486429 ABC 2010-09-07 09:29:00 302304
486429 DEF 2009-02-05 03:04:00 320903
486429 GHI 2009-02-05 03:04:00 320903
Was ich mag als Ergebnis erhalten, ist eine Pivot auf der ‚Code‘ Spalte, eine Angabe, ob oder nicht dieser Code existiert für ein Ich würde. Die Spalte 'created_datetime' versuche ich mit SELECT DATEDIFF (DAY, created_datetime, CURRENT_TIMESTAMP) in eine Anzahl von Tagen zu konvertieren - und schließlich die sourceID. Ich hatte so etwas für das Ergebnis im Hinterkopf (ich hoffe wirklich, dass dies richtig formatiert ist):
id ABC ABC_sou ABC_days_active DEF DEF_sou DEF_days_active GHI GHI_sou GHI_days_active JKH JKH_sou JKH_days_active
------ --- ------- --------------- --- ------- --------------- --- ------- --------------- --- ------- ---------------
481792 0 1 398464 211 1 398464 211
486429 1 302304 2491 1 320903 3070 1 320903 3070
Eine Linie pr. ID, das ist.
Was ich bisher versucht, ohne ganz dorthin zu gelangen, die von diesem Link inspiriert: PIVOT on Multiple Columns, und am Beispiel hier kam ich mit auf den Punkt:
select id,
[ABC], [ABC_source], [ABC_days_active],
[DEF], [DEF_source], [DEF_days_active],
[GHI], [GHI_source], [GHI_days_active],
[JKH], [JKH]_source], [JKH_days_active]
from
(
SELECT id,
code,
source,
col, value
FROM MyTable
cross apply
(
values
([code], CASE code WHEN NULL THEN 0 ELSE 1 END),
([code]+'_source', [source]),
([code]+'_date', CAST(DATEDIFF(DAY,created_datetime,CURRENT_TIMESTAMP) AS varchar (20)))
) c (col, value)
) d
pivot
(
max(value)
for col in ([ABC], [ABC_source], [ABC_date], [DEF], [DEF_source], [DEF_date],
[GHI], [GHI_source], [GHI_date], [JKH], [JKH_source], [JKH_date])
) piv;
, die mir die richtigen Spalten gab (Spaltennamen), aber ich habe immer noch die gleiche Anzahl von Zeilen wie ich begonnen habe. (Und außerdem wird 0 nur als NULL angezeigt, aber damit kann ich leben.)
Können Sie mir einen Hinweis geben, um mich dorthin zu bringen? Es ist wahrscheinlich etwas das ich gerade nicht richtig interpretiert habe ...
Versuchen Sie, 'piv. *' Auszuwählen. Sie haben die Spalten "_active" ausgewählt, obwohl sie nicht Teil des Pivots sind. Alle Spalten der 'FROM'-Klausel, die nicht im' PIVOT' verwendet werden, werden zum Gruppieren verwendet. Außerdem scheint es mir, dass Sie versuchen, zwei Spalten aus der Quellentabelle zu schwenken. 'PIVOT' unterstützt nur eine Spalte, um durch eine Aggregatfunktion zu schwenken. – Aquillo
Aha! Das war es - DANKE Aquillo !! Wie kann ich Ihren Kommentar bei der Antwort markieren und Ihnen dafür Kredit geben? – kiro
Sie können nicht, ich habe meinen Kommentar als Antwort gepostet. Froh, dass ich helfen konnte! – Aquillo