如何“有COUNT(DISTINCT(col1,col2))”

时间:2012-02-16 11:30:40

标签: sql sql-server sql-server-2005

所以我有一个包含三列的表格 - col1col2col3。我需要选择col1的共享行的值{em>仅 col2col3的一个组合。在理想的世界里,我会这样写:

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

如何在现实世界中做到这一点?

到目前为止,我有两个解决方案 - 分组col1col2以及col1col3加入结果;或按所有三个分组,然后按col1分组。不幸的是,我得到(非常)不同的数量。

数据库位于SQL Server 2005上。

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:-1)

select * 
from mycols
where col1 in (
    select max(col1)
    from mycols 
    group by col2, col3
    having count(col1)=1
)