所以我有一个包含三列的表格 - col1
,col2
和col3
。我需要选择col1
的共享行的值{em>仅 col2
和col3
的一个组合。在理想的世界里,我会这样写:
SELECT col1 FROM table
GROUP BY col1
HAVING COUNT(DISTINCT(col2, col3)) = 1
如何在现实世界中做到这一点?
到目前为止,我有两个解决方案 - 分组col1
和col2
以及col1
和col3
加入结果;或按所有三个分组,然后按col1
分组。不幸的是,我得到(非常)不同的数量。
数据库位于SQL Server 2005上。
答案 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
)