因此,我有一个包含三列的表-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上。
最佳答案
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