T-SQL Два Где предложения в одном столбце - PullRequest
3 голосов
/ 08 декабря 2010

В SQL Server 2008 ниже приведен пример таблицы.

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

Я хочу, чтобы записи имели Num = 10 и Num = 20. Запрос вернет

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

Большое спасибо.

Ответы [ 4 ]

6 голосов
/ 08 декабря 2010

Вы хотите что-то вроде этого:

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

Но есть и другие способы оформления "набора предметов со всеми следующими атрибутами". Cat.

1 голос
/ 08 декабря 2010

Вы можете попробовать это

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 голос
/ 08 декабря 2010

Любой из них даст желаемый результат:

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 голосов
/ 08 декабря 2010

Попробуйте это

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       
...