【问题标题】:SQL query that will return results when values in same column don't match, but different column duplicated当同一列中的值不匹配但不同列重复时将返回结果的 SQL 查询
【发布时间】:2021-11-12 21:48:10
【问题描述】:

我正在尝试编写一个查询,当 ID 重复(由不同的 Type 值引起)并且代码值在重复的行中不匹配时,将为我提供 ID。只有 2 个 Type 值是可能的,因此只会有 2 个重复项。

例如:

ID Type Code
ID 1 Type 1 #####
ID 1 Type 2 #####
ID 2 Type 1 #####
ID 2 Type 2 $$$$$

我想要的数据将不包括 ID 1,因为它的代码是相同的。

我不确定仅返回代码不匹配的 ID 所需的语法和逻辑,例如我的示例中的 ID 2。我也不会在最终报告中包含类型列,因为所需的信息存在于 ID 列中。我正在使用 DISTINCT,因为我也不需要重复的行。单个 ID 完全没问题,只要它的隐形伴侣有不同的代码。这是我查询的基础:

SELECT DISTINCT id, code
FROM table
WHERE id LIKE 'ID%'
AND

这就是我所在的地方。显然,这并没有什么可做的。我不会为提出问题和学习而感到抱歉,我当然会接受有关此问题的任何和所有反馈。

我也愿意接受其他建议,例如“只需在提取所有数据后在 Excel 中执行 - 会更快”,但您必须自己解释;)谢谢!

【问题讨论】:

    标签: sql excel amazon-redshift


    【解决方案1】:

    按 ID 聚合并检查您是否获得多个代码(通过比较最小值和最大值或通过计数不同):

    select id, min(code), max(code)
    from mytable
    group by id
    having min(code) <> max(code)
    order by id;
    

    【讨论】:

      【解决方案2】:

      根据代码对 ID 进行排名,因此对于相同的代码,两行 ID 都将排名第 1,如果代码不同,则特定 ID 的行将排名第 1 和第 2。稍后我们可以过滤排名为 2 的 ID 以获得所需的结果.

      with temp as(
       Select 
        ID, 
        rank() over (partition by ID order by code) as rn 
       from table_name)
      
      select ID from temp where rn = 2
      

      【讨论】:

        猜你喜欢
        • 2010-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-28
        • 2011-06-24
        • 2021-06-26
        相关资源
        最近更新 更多