2014-08-28 54 views
0

我試圖提取那些同時包含BuntiesCandies的罐。獲取不同的Column1值,其中包含所有需要的Column2值

Row#  Column1   Columm2 
---------------------------------------  
1   Jar1    Bunties 
2   Jar1    Candies 
3   Jar1    Biscuits 
4   Jar1    Jellies 
5   Jar2    Bunties 
6   Jar2    Candies 
7   Jar2    Biscuits 
8   Jar3    Bunties 
9   Jar3    Candies 
10   Jar4    Bunties 
11   Jar4    Jellies 

Jar1,Jar2,Jar3是所希望的輸出,因爲這些是同時包含BuntiesCandies唯一罐子。

回答

1

你可以使用一個GROUP BYHAVING得到結果:

select Column1 
from dbo.yourtable 
where Columm2 in ('Bunties', 'Candies') 
group by Column1 
having count(distinct Columm2) = 2; 

WHERE條款將包括你正在尋找的值因爲,那麼你GROUP BYColumn1並計數在Columm2不同的值。

0
SELECT DISTINCT COLUMN1, COUNT(*) 
FROM TABLE 
WHERE COLUMN2 IN ('BUNTIES','CANDIES') 
HAVING COUNT(*)=2 
+1

他希望所有給定'Column1'具有**兩者都不是**。 – 2014-08-28 13:33:11

+0

@BernardoLima你的回答並不符合我的要求,它也會提取ja​​r4,因爲它包含Bunties。但我想要得到那些只含有丁香和糖果的罐子。 – user3310585 2014-08-28 13:39:05

+0

@ user3310585,一個jar是否有多個列2的條目?就像Jar3有兩個糖果項目一樣。 – BernardoLima 2014-08-28 13:41:20

1

你可以使用EXISTS:

SELECT Distinct t.Column1 
FROM dbo.TableName t 
WHERE t.Columm2 IN ('Bunties', 'Candies') 
AND EXISTS(
    SELECT 1 FROM dbo.TableName t2 
    WHERE t2.Column1 = t.Column1 
    AND t2.Columm2 <> t.Columm2 
    AND t2.Columm2 IN ('Bunties', 'Candies') 
) 
+0

嘿,謝謝你在我的工作。 @TimSchmelter如果數據太長,它的性能會如何。在獲取數據時會影響整體性能嗎? – user3310585 2014-08-28 13:54:49

+0

@ user3310585:這取決於您的索引。 http://sqlserverplanet.com/indexes/sql-server-indexes-tutorial – 2014-08-28 14:00:46

相關問題