2012-09-18 44 views
0

我試圖制定一個查詢,這將允許我返回具有相同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的至少一行中,因此ID 1和3的所有行數據都被選中,而剩餘的數據被過濾掉。有沒有辦法在where子句中寫這個或者我需要考慮另一種方法?

謝謝!

回答

2

試試這個;它會選擇所有記錄,其中任何標識至少有一個紀錄Parameter = 'Y'

SELECT [ID], [Parameter] 
FROM YourCurrentTable 
WHERE [ID] IN (
    SELECT [ID] 
    FROM YourCurrentTable 
    WHERE [Parameter] = 'Y' 
) 
+0

這工作一級棒!非常感謝。 – cheaven88

0

這裏有一種方法可以做到這一點

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') 
+1

如果你打算給查詢例子,請確保它們是可行的例子。你的insert語句不起作用,你的select語句引用了上面未定義的'i'和'j'。意圖非常清楚,但該示例不起作用。 – LittleBobbyTables

+0

我的不好。我已經修復了代碼。謝謝! –

1

出於性能的目的,你應該更喜歡使用EXISTS代替。 看到這個線程瞭解EXISTS和IN的區別:SQL Server IN vs. EXISTS Performance

select id, parameter 
from current_table c1 
where exists (
    select 1 
    from current_table c2 
    where c2.id = c1.id 
    parameter = 'y' 
);