0

行の 1 つが特定の条件を満たす場合に、同じ ID 番号を持つすべての行を返すことができるクエリを作成しようとしています。私の現在のテーブルと希望のテーブルは次のとおりです。

現在のテーブル:

ID  Parameter
1   x
1   x
1   y
1   x
2   x
2   x
2   x
3   y
3   y
3   x
4   x
4   x
4   x

望ましい結果:

ID  Parameter
1   x
1   x
1   y
1   x
3   y
3   y
3   x

この例では、関心のあるパラメーターは「y」です。y は ID 1 と 3 の行の少なくとも 1 つに表示されるため、ID 1 と 3 のすべての行データが選択され、残りは除外されます。これをwhere句に書く方法はありますか、それとも別の方法を検討する必要がありますか?

ありがとうございました!

4

3 に答える 3

2

これを試して; ID に次のレコードが少なくとも 1 つあるすべてのレコードが選択されますParameter = 'Y'

SELECT [ID], [Parameter]
FROM YourCurrentTable
WHERE [ID] IN (
    SELECT [ID]
    FROM YourCurrentTable
    WHERE [Parameter] = 'Y'
)
于 2012-09-18T18:17:53.727 に答える
1

パフォーマンス上の理由から、INではなくEXISTSを使用することをお勧めします。EXISTSとINの違いを理解するには、このスレッドを参照してください:SQLServerINとEXISTSのパフォーマンス

select id, parameter
from current_table c1
where exists (
    select 1
    from current_table c2
    where c2.id = c1.id
    parameter = 'y'
);
于 2012-09-18T18:24:56.760 に答える
0

これを行う方法の 1 つを次に示します。

    create table tret (i int, j char)
    insert into tret values 
    (1,   'x'),
    (1,   'x'),
    (1,   'y'),
    (1,   'x'),
    (2,   'x'),
    (2,   'x'),
    (2,   'x'),
    (3,   'y'),
    (3,   'y'),
    (3,   'x'),
    (4,   'x'),
    (4,   'x'),
    (4,   'x')


    select * from tret where i in (select i from tret where j = 'y')
于 2012-09-18T18:21:10.987 に答える