使用相同ID在同一列中查询具有不同值的SQL Server表

时间:2016-12-08 03:34:48

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

我有一个带有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多次出现。 id为4的行是相同的。我不想在我的结果中这样做。 ID为1的行,虽然名字相同,但是1行的姓氏不同。我只想要那些ID相同但名字或名字不同的ID。

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

这是我正在寻找的输出

ID
---
1

2 个答案:

答案 0 :(得分:0)

如果您需要ID,请使用聚合和having

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

答案 1 :(得分:0)

试试这个

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

OUTPUT :1