0

これは、複数の行を比較して特定のIDを見つけたいテーブルデータです..

onetsoc_code    element_id   data_value

11-1011.00      1.B.1.a      1.33
11-1011.00      1.B.1.b      2.00
11-1011.00      1.B.1.c      2.67
11-1011.00      1.B.1.d      3.67
11-1011.00      1.B.1.e      7.00
11-1011.00      1.B.1.f      5.33
11-1011.00      1.B.1.g      5.00
11-1011.00      1.B.1.h      6.00
11-1011.00      1.B.1.i      0.00
11-1021.00      1.B.1.a      1.33
11-1021.00      1.B.1.b      1.33
11-1021.00      1.B.1.c      1.00
11-1021.00      1.B.1.d      3.33
11-1021.00      1.B.1.e      7.00
11-1021.00      1.B.1.f      3.67
11-1021.00      1.B.1.g      5.00
11-1021.00      1.B.1.h      6.00
11-1021.00      1.B.1.i      4.00
11-1031.00      1.B.1.a      1.00
11-1031.00      1.B.1.b      3.67
11-1031.00      1.B.1.c      3.67
11-1031.00      1.B.1.d      4.67
11-1031.00      1.B.1.e      7.00

これは私のテーブルなので、これらのonetsoc_codeが必要です。

1.B.1.g      5.00
1.B.1.h      6.00
1.B.1.i      4.00

表を見ると、11-1021.00が必要な結果であることがわかります。

これが、1.B.1.a から 1.B.1.f を取得するためのロジックです。一度に 3 つの行のみを比較し、それらのデータに関連付けられた単一のonetsoc_codeが必要です。

1.B.1.g、1.B.1.h、1.B.1.i の行はすべてのonetsoc_codeで使用できるため、上記の条件を再び満たす onetsoc_codeが必要です。

1.B.1.g      5.00
1.B.1.h      6.00
1.B.1.i      4.00
4

1 に答える 1

2

次の 3 つのレコードonetsoc_codeを含むグループでグループ化し、フィルター処理できます。DISTINCT

SELECT   onetsoc_code
FROM     mytable
WHERE    (element_id = '1.B.1.g' AND data_value = 5.00)
      OR (element_id = '1.B.1.h' AND data_value = 6.00)
      OR (element_id = '1.B.1.i' AND data_value = 4.00)
GROUP BY onetsoc_code
HAVING   COUNT(DISTINCT element_id, data_value) = 3

sqlfiddleで参照してください。

もちろん、一意性が保証されている場合は、DISTINCT操作の費用を節約し、代わりに単純な古いものを使用できますCOUNT(*)

于 2012-07-22T10:34:52.703 に答える