Ausgabe
Ich habe eine Tabelle und eine Abfrage, um Daten von Zeile zu Spalte wie folgt auszuwählen:
id | type | data
-----------------------
1 | Name | John
1 | Gender | Male
1 | Code | 1782
2 | Name | Dave
2 | Gender | Male
Anfrage:
select a.id, a.data as [Name], b.data as [Gender], c.data as [Code]
from table1 a join table1 b on a.id = b.id
join table1 c on b.id = c.id
where a.type = 'Name' and b.type = 'Gender' and c.type = 'Code'
Ergebnis:
id | Name | Gender | Code
------------------------------
1 | John | Male | 1782
In diesem Fall hat die ID-Nummer 2 mit dem Namen „Dave“ keinen „Code“, sodass sie nicht im Ergebnis erscheint. Wie kann ich das Ergebnis trotzdem mit leeren Daten oder NULL in der ‘Code’-Tabelle anzeigen, damit es folgendes Ergebnis hat:
id | Name | Gender | Code
------------------------------
1 | John | Male | 1782
2 | Dave | Male |
Lösung
Sie können CASE
Ausdruck anstelle von JOIN
s verwenden:
SELECT
a.id,
MAX(CASE WHEN a.type = 'Name' THEN a.data ELSE '' END) AS [Name],
MAX(CASE WHEN a.type = 'Gender' THEN a.data ELSE '' END) AS [Gender],
MAX(CASE WHEN a.type = 'Code' THEN a.data ELSE '' END) AS [Code]
FROM table1 a
WHERE
a.type IN('Name', 'Gender', 'Code')
GROUP BY a.id
Beantwortet von – iSR5
Antwort geprüft von – David Marino (FixError Volunteer)