SQL-Zeilen kombinieren

332
picobit

Ich habe eine Tabelle mit drei Spalten: ID, Datum, Gruppe. Für jede eindeutige ID gibt es zwei Zeilen (wobei Group = 1 oder Group = 2 ist). Wie kann ich diese in einer Tabelle mit einer Zeile pro ID kombinieren und die Datumswerte in zwei Spalten sortieren?

Ich habe:

ID Date Group 123456 12/7/2016 1 123456 12/3/2016 2 789654 11/8/2016 1 789654 12/1/2016 2 

Ich will:

ID Date1 Date2 123456 12/7/2016 12/3/2016 789654 11/8/2016 12/1/2016 

Dies ist für Sybase 12, wenn das wichtig ist.

0

2 Antworten auf die Frage

1
3N1GM4
SELECT DISTINCT  s.ID, s1.[Date] AS Date1, s2.[Date] AS Date2 FROM @SomeTable s LEFT JOIN @SomeTable s1 ON s.ID = s1.ID AND s1.[Group] = 1 LEFT JOIN @SomeTable s2 ON s.ID = s2.ID AND s2.[Group] = 2 

oder

SELECT DISTINCT s.ID, (SELECT [Date] FROM @SomeTable s1 WHERE s1.ID = s.ID AND s1.[Group] = 1) AS Date1, (SELECT [Date] FROM @SomeTable s2 WHERE s2.ID = s.ID AND s2.[Group] = 2) AS Date2 FROM @SomeTable s 

sind die ersten zwei Möglichkeiten, die mir einfallen. Bei beiden wird davon ausgegangen, dass für jede ID / Gruppenkombination immer nur ein Datensatz vorhanden ist.

Vielen Dank. Und ja, deine Annahme ist richtig. Ich nehme Ihre Antwort an, nachdem ich diesen Freitag einen Wirbel gemacht habe. picobit vor 7 Jahren 0
Danke, ich habe die erste Methode verwendet. Ich habe den zweiten nicht probiert. Ein zweimaliger Beitritt scheint jetzt so offensichtlich zu sein ... picobit vor 7 Jahren 0
1
Ben Slade

Sie können dies auch mit nur zwei Tabellen in der 'from'-Klausel tun:

select a.ID, a.Date as Date1, b.Date as Date2 from mytable a, mytable b where a.ID=B.ID and a.Group=1 and b.Group=2