2016-04-11 11 views
0

Haben Sie eine Tabelle wie diese. Nehmen wir an, es vollen Tisch und wir haben nicht alle anderen Reihen:Case für den gesamten Datensatz in SQL-Tabelle

ID Place 
1 A 
1 B 
2 C 
3 D 

Wie kann ich so etwas durchführen:

ID Place YesNo 
1 A  1 
1 B  1 
1 C  0 
1 D  0 
2 A  0 
2 B  0 
2 C  1 
2 D  0 
3 A  0 
3 B  0 
3 C  0 
3 D  1 

Für ja/nein ich CASE-Anweisung müssen aber wie die Rest- zu tun Volle Join-Tabelle auf sich selbst oder einige andere Optionen?

Danke!

+0

ist die Idee, sowohl Platz anzuzeigen ist, dass ID = 1 und ID <> 1 unter ID = 1. Es ist ein Analogon des vollständigen Joins. – HalfPintBoy

+0

Also alle Werte in der Tabelle mit ID = 1 und alle Werte der Tabelle mit ID = 2 und dann CASE in der dritten Spalte für 0 oder 1 ausführen – HalfPintBoy

+0

Ich habe die Post reedit ich denke jetzt ist es klarer. Sorry für den ersten unklaren Eintrag – HalfPintBoy

Antwort

0

Das erreichen Sie mit zwei Unterabfragen, die jeweils die möglichen Werte einer der Spalten auflisten. Die zwei Ergebnisse sollten dann gekreuzt werden, um alle Kombinationen zu erhalten. Schließlich diese äußere Verknüpfung mit der ursprünglichen Tabelle zu sehen, welche auftreten Kombinationen tatsächlich:

SELECT  first.ID, 
      second.Place, 
      CASE WHEN mytable.ID IS NULL THEN 0 ELSE 1 END AS YesNo 
FROM  (
      SELECT DISTINCT ID 
      FROM mytable 
      ) first 
CROSS JOIN (
      SELECT DISTINCT Place 
      FROM mytable 
      ) second 
LEFT JOIN mytable 
     ON mytable.ID = first.ID 
     AND mytable.Place = second.Place 
ORDER BY first.ID, 
      second.Place 

Hier ein SQL fiddle

+0

Ja, das weiß ich. Aber wie kann ich es sowohl für ID = 1 und ID <> 1 anzeigen – HalfPintBoy

+0

OK, nach der Aktualisierung Ihrer Frage wurde klar. Meine Antwort wurde aktualisiert. – trincot

Verwandte Themen