2016-04-11 8 views
0

このようなテーブルがあります。のは、それは完全なテーブルであり、我々は他の行を持っていけないふりをしてみましょう:SQLテーブル内のデータセット全体のケース

ID Place 
1 A 
1 B 
2 C 
3 D 

は、どうすればそのようなことを実行することができます。はい/いいえ、私はCASE文を必要とするため

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 

が、どのようREST-を行うにはitlselfまたはいくつかの他のオプションの完全な結合テーブル?

ありがとうございます!

+0

あるID = 1の下でID = 1、ID <> 1、両方の場所を表示することです。フル・ジョインのアナログです。 – HalfPintBoy

+0

ID = 1のテーブルのすべての値とID = 2のテーブルのすべての値と0または1の3列目のCASEを実行 – HalfPintBoy

+0

私はポストを編集しました。最初の不明なエントリーに申し訳ありません – HalfPintBoy

答えて

0

これは、2つのサブクエリで実現できます。サブクエリのそれぞれは、列のうちの1つの可能な値をリストします。この2つの結果は、すべての組み合わせを得るために交差しなければなりません。最後に、外側実際に発生組み合わせかを確認するために、元のテーブルでこれを参加:ここ

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 

アイデアSQL fiddle

+0

これは分かります。しかし、どうすればID = 1とID <> 1の両方で表示できますか? – HalfPintBoy

+0

OK、質問の更新後は明らかになりました。私の答えを更新しました。 – trincot