【问题标题】:SQL Query with duplication key带有重复键的 SQL 查询
【发布时间】: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'),预期的结果是什么?
  • 请用数据库标记。您需要使用枢轴。

标签: sql join pivot window-functions


【解决方案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 子句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多