【问题标题】:Querying SQL Server table with different values in same column with same ID [duplicate]在具有相同ID的同一列中查询具有不同值的SQL Server表[重复]
【发布时间】:2017-04-23 05:10:27
【问题描述】:

我有一个带有 ID、名字和姓氏的 SQL Server 2012 表。每个人的 ID 都是唯一的,但由于历史 Feed 中的错误,不同的人被分配了相同的 ID。

------------------------------
ID  FirstName   LastName
------------------------------   
1    ABC         M
1    ABC         M
1    ABC         M
1    ABC         N
2    BCD         S
3    CDE         T
4    DEF         T
4    DEF         T

有两个 ID 多次出现。 1 和 4。id 为 4 的行是相同的。我不希望这出现在我的结果中。 ID 为 1 的行,1 行虽然名字相同,但姓氏不同。我只想要那些 ID 相同但名字或姓氏之一不同的 ID。

我尝试将多次出现的 ID 加载到临时表中,并尝试将其与父表进行比较,尽管未成功。我可以尝试和实施其他任何想法吗?

这是我正在寻找的输出

ID
---
1

【问题讨论】:

  • 你能不能也给我们看看欲望输出?
  • 我只需要查询输出。在这种情况下 1

标签: sql sql-server windows group-by querying


【解决方案1】:

如果你想要 id,那么使用聚合和having:

select id
from t
group by id
having min(firstname) <> max(firstname) or min(lastname) <> max(lastname);

【讨论】:

    【解决方案2】:

    试试这个

    CREATE TABLE #myTable(id INT, firstname VARCHAR(50), lastname VARCHAR(50))
    
    INSERT INTO #myTable VALUES 
    (1,    'ABC',         'M'),
    (1,    'ABC',         'M'),
    (1,    'ABC',         'M'),
    (1,    'ABC',         'N'),
    (2,    'BCD',         'S'),
    (3,    'CDE',         'T'),
    (4,    'DEF',         'T'),
    (4,    'DEF',         'T')
    
    SELECT id FROM (
        SELECT DISTINCT id, firstname, lastname
        FROM #myTable) t GROUP BY id HAVING COUNT(*)>1
    

    输出为:1

    【讨论】: