1

列 foo、bar、および baz を含むテーブルがあります。ここで、foo は bar のエントリごとに 1 回繰り返され、各バーの baz に可能なエントリがあります。例として:

|-----|-----|-----|
| foo | bar | baz |
|-----|-----|-----|
|  1  |  1  |alpha|
|  1  |  2  |beta |
|  1  |  3  |gamma|
|  2  |  1  |delta|
|  2  |  2  |beta |
|  2  |  3  |kappa|
|  3  |  1  |     |
|  3  |  2  |     |
|  3  |  3  |iota |
|-----|-----|-----| etc

実際には、このテーブルには何百万ものエントリがあります。2 つの異なる foo エントリが一致する bar+baz エントリを持つ状況を探しています (たとえば、両方ともbetabar 2 にあるため、上記の foo 1 と foo 2 が見つかります)、特定の foo の範囲では、そうではありませんテーブル全体を見ています。

これが可能かどうかはわかりませんが、サブクエリのさまざまな順列はこれまでのところ機能していませんが、foo をリストするクエリを作成しようとしており、次の列は次のとおりです。baz where bar = x and foo = [the foo for the current row]

したがって、バー 2 とバー 3 を見ると、上の表は次のようになります。

|-----|-----|-----|
| foo |bar=2|bar=3|
|-----|-----|-----|
|  1  |beta |gamma|
|  2  |beta |kappa|
|  3  |     |iota |
|-----|-----|-----|

私はSQLに比較的慣れていないため、これを行う特定の構文を認識していない可能性があり、Googleで検索することはできませんでした. 使ってみました

select foo, (baz where bar=2) as 'bar=2', (baz where bar=3) as 'bar=3' from....

まったく予想外ではありませんでしたが、良い結果にはなりませんでした。全選択クエリを列ヘッダーとして配置することを検討しましたが、「この行の foo」を参照する方法がわかりません。私はここで不可能なアイデアを追いかけているだけですか?別の方法は、外部アプリケーションを使用して多くの小さなクエリを実行し、代わりにその方法でデータを保存することですが、SQL サーバー内で完全に実行できない場合は、それが私の計画です。

4

1 に答える 1

1

2 つの異なる foo エントリが一致する bar+baz エントリを持つ状況を探しています (たとえば、上記の foo 1 と foo 2 はどちらも bar 2 にベータがあるため)。

それは非常に簡単です。これは、自己結合によって実現できます。

SELECT * FROM Table1 t1
INNER JOIN Table1 t2 ON t1.foo != t2.foo
WHERE
t1.bar = t2.bar 
AND t1.baz = t2.baz

ここで実際の動作を確認してください。

あなたの質問の残りの部分は、私にはまったく理解できません。上記の質問とは関係ないようです。なぜ bar = 2 と bar = 3 を見ているのでしょうか。また、ガンマ、カッパ、イオタが結果にリストされているのはなぜですか? どうか明らかにしてください...

于 2013-05-15T09:21:38.710 に答える