gpt4 book ai didi

sql - 在 SQL 中,在另一列中查找具有唯一值的列中的重复项

转载 作者:行者123 更新时间:2023-12-04 14:12:28 26 4
gpt4 key购买 nike

所以我有一个链接到记录 ID 的别名表。我需要找到具有唯一记录 ID 的重复别名。为了更好地解释:

ID    Alias     Record ID
1 000123 4
2 000123 4
3 000234 4
4 000123 6
5 000345 6
6 000345 7

对该表的查询结果应该是
000123    4    6
000345 6 7

表示记录 4 和 6 的别名都是 000123,记录 6 和 7 的别名都是 000345。

我正在考虑使用 GROUP BY 但如果我按别名分组,那么我无法选择记录 ID,如果我同时按别名和记录 ID 分组,它只会返回本示例中的前两行,其中两列都是重复的。我找到的唯一解决方案是对所有数据进行两次不同的选择,然后加入它们
ON [T_1].[ALIAS] = [T_2].[ALIAS] AND NOT [T_1].[RECORD_ID] = [T_2].[RECORD_ID]

有没有更好的解决方案?就像在运行几十万条记录时不会使我的服务器崩溃?

最佳答案

看起来你有两个要求:

  • 识别所有具有多个记录 ID 的别名,以及
  • 水平列出这些别名的记录 ID。

  • 第一个比第二个容易得多。这里有一些 SQL 应该可以让你通过第一个到达你想要的地方:
    WITH A   -- Get a list of unique combinations of Alias and [Record ID]
    AS (
    SELECT Distinct
    Alias
    , [Record ID]
    FROM T1
    )
    , B -- Get a list of all those Alias values that have more than one [Record ID] associated
    AS (
    SELECT Alias
    FROM A
    GROUP BY
    Alias
    HAVING COUNT(*) > 1
    )
    SELECT A.Alias
    , A.[Record ID]
    FROM A
    JOIN B
    ON A.Alias = B.Alias

    现在,第二个。如果您对此表格中的数据感到满意:
    Alias     Record ID
    000123 4
    000123 6
    000345 6
    000345 7

    ……你可以停在那里。否则,事情会变得棘手。

    PIVOT 命令不一定对您有帮助,因为它试图解决与您遇到的问题不同的问题。

    我假设您不一定能预测有多少重复 Record ID您根据 Alias 拥有的值,因此不知道您需要多少列。如果您只有两个,那么在列中显示它们中的每一个就变得相对简单。如果您有更多记录,我建议您考虑这些记录的目的地(报告?网页?Excel?)是否能够比 SQL Server 在返回排列后更好地水平显示它们水平。

    关于sql - 在 SQL 中,在另一列中查找具有唯一值的列中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17536913/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com