2014-08-28 26 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

相关问题