Как "СЧЕТЧИК (ОТЛИЧНЫЙ (col1, col2))" - PullRequest
2 голосов
/ 16 февраля 2012

Итак, у меня есть таблица с тремя столбцами - col1, col2 и col3.Мне нужно выбрать те значения col1, которые совместно используют строки с только одним сочетанием col2 и col3.В идеальном мире я бы написал так:

SELECT col1 FROM table
GROUP BY col1
HAVING COUNT(DISTINCT(col2, col3)) = 1

Как это сделать в реальном мире?

Пока у меня есть два решения - сгруппировать по col1 и col2 и поcol1 и col3 их объединяют результаты;или сгруппируйте по всем трем, затем сгруппируйте по col1.К сожалению, я получаю (очень) различное число операций.

База данных находится на SQL Server 2005.

Ответы [ 2 ]

7 голосов
/ 16 февраля 2012
SELECT col1
FROM table
GROUP BY col1
HAVING MAX(col2) = MIN(col2) AND MAX(col3) = MIN(col3)

Более сложный:

SELECT col1
FROM
    (
    SELECT
        col1, 
        ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2, col3) as rn
    FROM table
    ) T
GROUP BY col1
HAVING MAX(rn) = 1
0 голосов
/ 16 февраля 2012
select * 
from mycols
where col1 in (
    select max(col1)
    from mycols 
    group by col2, col3
    having count(col1)=1
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...