2010-12-07 64 views
3

在SQL Server 2008中,我有下面的Table Sample。T-SQL在同一列上的Where Where子句

Name Num 
---------- 
John 20 
John 30 
Peter 10 
Peter 20 
Peter 30 
Marry 20 
Marry 30 
Mike 10 
Mike 20 
Mike 30 
Phil 10 
Phil 30 

我想有民= 10和Num = 20记录的查询将返回

Name Num 
---------- 
Peter 10 
Peter 20 
Mike 10 
Mike 20 

非常感谢。

回答

6

你想是这样的:

SELECT Name, Num 
FROM tbl 
WHERE Name IN (
    SELECT Name FROM tbl 
    WHERE Num IN (10, 20) 
    GROUP BY Name 
    HAVING COUNT(*) = 2 -- Must have all items in the set of 2 
) 
AND Num IN (10, 20) -- still need to restrict, since the set is not maximal 

但也有其他方法对皮肤的“所有的下列属性设置项目的”猫。

1

这些要么会产生你想要的输出:

SELECT * FROM Sample WHERE Num IN (10, 20) 

SELECT * FROM Sample WHERE Num = 10 OR Num = 20 

编辑:对不起,这似乎是它不是真正的你想要的。我相信这会起作用,但它不是很优雅:

SELECT * FROM Sample 
WHERE Name IN (SELECT Name FROM Sample WHERE Num = 10) 
    AND Name IN (SELECT Name FROM Sample WHERE Num = 20) 

可能有更好的解决方案。很抱歉对于这个误会。

+0

他要求有至少一排有10名,以及至少一个具有行20 – bobs 2010-12-07 22:55:15

+0

编辑后的版本仍然会展示彼得30,这不是OP想要的。 – 2010-12-07 22:58:58

+0

哦,对,好点。 : - \ – Charley 2010-12-07 22:59:23

1

你可以试试这个

SELECT Name, Num 
FROM MyTableSample s 
WHERE Num in (10, 20) 
    AND EXISTS 
     (
     SELECT Name 
     FROM MyTableSample s2 
     WHERE s.name = s2.Name 
      AND s.Num <> s2.Num 
      AND s2.Num in (10, 20) 
     ) 
-1

试试这个

SELECT * 
    FROM (SELECT Name, Num FROM Sample WHERE Num = 10) A, 
        (SELECT Name, Num FROM Sample WHERE Num = 20) B 
where A.nAME = B.nAME