如何"有COUNT(DISTINCT(col1,col2))"

zza*_*ndy 2 sql sql-server sql-server-2005

所以我有一个表有三列- col1,col2col3.我需要选择那些col1共享行的值,只有一个col2和的组合col3.在理想的世界里,我会这样写:

SELECT col1 FROM table
GROUP BY col1
HAVING COUNT(DISTINCT(col2, col3)) = 1
Run Code Online (Sandbox Code Playgroud)

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

到目前为止,我有两个解决方案-通过组col1col2col1col3他们加入的结果; 或者按所有三个分组,然后分组col1.不幸的是,我得到(非常)不同的数量.

该数据库位于SQL Server 2005上.

gbn*_*gbn 7

SELECT col1
FROM table
GROUP BY col1
HAVING MAX(col2) = MIN(col2) AND MAX(col3) = MIN(col3)
Run Code Online (Sandbox Code Playgroud)

更复杂:

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
Run Code Online (Sandbox Code Playgroud)