SQL Server - PIVOT - zwei Spalten in Zeilen
Sah ich viele Fragen über PIVOT für eine einzelne Spalte, jede Frage komplexer als andere, allerdings konnte ich nichts finden wie das, was ich brauche.
Um ehrlich zu sein, ich weiß gar nicht, ob pivot wird mir helfen, in dieser situation.
Lassen Sie uns sagen, dass ich diese Daten auf meiner Quell-Tabelle:
SELECT '1' as 'RowId', 'RandomName1' as 'First', 'RandomLast1' as 'Last'
UNION
SELECT '2' as 'RowId', 'RandomName2' as 'First', 'RandomLast2' as 'Last'
UNION
SELECT '3' as 'RowId', 'RandomName3' as 'First', 'RandomLast3' as 'Last'
UNION
SELECT '4' as 'RowId', 'RandomName4' as 'First', 'RandomLast4' as 'Last'
UNION
SELECT '5' as 'RowId', 'RandomName5' as 'First', 'RandomLast5' as 'Last'
Maximal 5 Zeilen mit den vor-und den Nachnamen.
Der Wert der Spalten der Ersten und der Letzte wird zufällig sein.
RowId First Last
----- ----------- -----------
1 RandomName1 RandomLast1
2 RandomName2 RandomLast2
3 RandomName3 RandomLast3
4 RandomName4 RandomLast4
5 RandomName5 RandomLast5
War ich versucht, pivot-diese Daten, um so etwas wie dieses:
First1 Last1 First2 Last2 First3 Last3 First4 Last4 First5 Last5
----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
RandomName1 RandomLast1 RandomName2 RandomLast2 RandomName3 RandomLast3 RandomName4 RandomLast4 RandomName5 RandomLast5
Zum Beispiel:
Ich habe kein problem, wenn Spalten First5 und Last5 sind NULL, weil es gibt nur 4 Reihen.
First1 Last1 First2 Last2 First3 Last3 First4 Last4 First5 Last5
----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
RandomName1 RandomLast1 RandomName2 RandomLast2 RandomName3 RandomLast3 RandomName4 RandomLast4 NULL NULL
Kann mir jemand ein wenig helfen?
Danke.
Lösung basiert auf Sheela K R Antworten:
SELECT
MAX(First1) as 'First1', MAX(Last1) as 'Last1',
MAX(First2) as 'First2', MAX(Last2) as 'Last2',
MAX(First3) as 'First3', MAX(Last3) as 'Last3',
MAX(First4) as 'First4', MAX(Last4) as 'Last4',
MAX(First5) as 'First5', MAX(Last5) as 'Last5'
FROM
(
SELECT
CASE WHEN RowId = 1 THEN [First] END as 'First1',
CASE WHEN RowId = 1 THEN [Last] END as 'Last1',
CASE WHEN RowId = 2 THEN [First] END as 'First2',
CASE WHEN RowId = 2 THEN [Last] END as 'Last2',
CASE WHEN RowId = 3 THEN [First] END as 'First3',
CASE WHEN RowId = 3 THEN [Last] END as 'Last3',
CASE WHEN RowId = 4 THEN [First] END as 'First4',
CASE WHEN RowId = 4 THEN [Last] END as 'Last4',
CASE WHEN RowId = 5 THEN [First] END as 'First5',
CASE WHEN RowId = 5 THEN [Last] END as 'Last5'
FROM
(
SELECT '1' as 'RowId', 'RandomName1' as 'First', 'RandomLast1' as 'Last'
UNION SELECT '2' as 'RowId', 'RandomName2' as 'First', 'RandomLast2' as 'Last'
UNION SELECT '3' as 'RowId', 'RandomName3' as 'First', 'RandomLast3' as 'Last'
UNION SELECT '4' as 'RowId', 'RandomName4' as 'First', 'RandomLast4' as 'Last'
--UNION SELECT '5' as 'RowId', 'RandomName5' as 'First', 'RandomLast5' as 'Last'
) test
) test2
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein paar verschiedene Möglichkeiten, um das Ergebnis zu erhalten, die Sie möchten. Ähnlich @Sheela K R beantworten, können Sie eine Aggregatfunktion mit einem CASE-Ausdruck aber es kann geschrieben werden in präziser Art und Weise:
Sehen SQL Fiddle mit Demo.
Dies könnte auch geschrieben werden mit der PIVOT-Funktion, aber da will man pivot-mehrere Spalten, dann würden Sie zuerst anschauen wollen unpivoting Ihre
First
undLast
Spalten.Der unpivot-Prozess konvertieren Sie Ihre mehrere Spalten in mehreren Zeilen von Daten. Sie hat nicht angegeben, welche version von SQL Server Sie verwenden, aber Sie können eine
SELECT
mitUNION ALL
mitCROSS APPLY
oder sogar dieUNPIVOT
Funktion zum ausführen der ersten Konvertierung:Sehen SQL Fiddle mit Demo. Dieser wandelt Ihre Daten in das format:
Sobald sich die Daten in mehreren Zeilen, dann können Sie ganz einfach anwenden-PIVOT-Funktion:
Sehen SQL Fiddle mit Demo
Beide geben ein Ergebnis:
rowId
verwendet werden können.Probieren Sie etwas wie dieses