带有重复键的 SQL 查询
Posted
技术标签:
【中文标题】带有重复键的 SQL 查询【英文标题】:SQL Query with duplication key 【发布时间】:2020-09-17 14:19:14 【问题描述】:我有一张这样的桌子
KEY|VIN|MORE DATA
1 |123| BLA BLA
2 |456|
3 |678|
4 |777|
1 |888|
现在我需要查询,所以当 KEY 有重复时,例如是不同的结果,例如
结果
KEY|VIN|VIN2
1 |123|888
我该怎么做?
【问题讨论】:
到目前为止你尝试过什么?你被困在哪里了? 提示:GROUP BY
.
如果有人插入行(1,357,'xyz')
,预期的结果是什么?
请用数据库标记。您需要使用枢轴。
【参考方案1】:
对于您的示例数据,您可以只使用聚合:
select key, min(vin) vin, max(vin) vin2
from mytable
group by key
having count(*) > 1
如果每个 key
有两个以上的值,这可能不会完全符合您的要求(结果集中只会显示两个值)。也许您想改用条件聚合:
select
key,
max(case when rn = 1 then vin end) vin1,
max(case when rn = 2 then vin end) vin2,
max(case when rn = 3 then vin end) vin3
from (select t.*, row_number() over(partition by key order by vin) rn from mytable)
group by key
having count(*) > 1
这将处理每个 key
最多三个值 - 您可以根据需要使用更多条件 max()
表达式扩展 select
子句。
【讨论】:
以上是关于带有重复键的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何在带有 £ 符号的数字列上为 SQL 查询添加前缀 [重复]