因此,我有一个包含三列的表-col1col2col3。我需要选择仅与col1col2的一个组合共享行的col3的那些值。在理想世界中,我会这样写:

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

在现实世界中该怎么做?

到目前为止,我有两个解决方案-按col1col2分组,并按col1col3分组,它们将合并结果。或按全部三个组进行分组,然后按col1进行分组。不幸的是,我得到(非常)不同的担忧。

该数据库位于SQL Server 2005上。

最佳答案

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

10-01 19:28
查看更多