我正在尝试通过违反唯一键索引来隔离问题。我很确定原因是由于列中具有相同值的列在3列中没有相同的值(当它们应该时)。举个例子......
Key Column1 Column2 Column3 Column4
1 A B C D
2 A B C D
3 A B C D
4 A B C Z
我基本上想要选择第4列,或者某种方式让我识别第4列。我知道这是使用聚合函数的问题,但我对它们并不是很熟悉。任何人都可以协助选择Key,Column4来获得具有不同列4值和相同列1-3值的行吗?
答案 0 :(得分:1)
这就是你想要的:
select column1, column2, column3
from t
group by column1, column2, column3
having min(column4) <> max(column4)
获得前三列的正确值后,您可以重新加入以获取特定行。
或者,你可以使用这样的窗口函数:
select t.*
from (select t.*, min(column4) over (partition by column1, column2 column3) as min4,
max(column4) over (partition by column1, column2 column3) as max4
from t
) t
where min4 <> max4;
如果NULL
是您想要计算的有效“其他”值,则需要额外的逻辑。
答案 1 :(得分:1)
如果您想获取所有列,那么(如果窗口count
支持distinct
可能会更简单,但事实并非如此):
with cte1 as (
select distinct * from Table1
), cte2 as (
select
*,
count(column4) over(partition by column1, column2, column3) as cnt
from cte1
)
select * from cte2 where cnt > 1;
如果您只想选择密钥:
select
column1, column2, column3
from Table1
group by column1, column2, column3
having count(distinct column4) > 1