的SQL Server:查找基于值一列

问题描述:

我有以下字段和样本数据SQL Server表在表中重复:的SQL Server:查找基于值一列

ID employeename 
1 Jane 
2 Peter 
3 David 
4 Jane 
5 Peter 
6 Jane 

ID列具有唯一值的每一行。

employeename列有重复项。

我希望能够根据employeename列找到重复项,并列出旁边有重复项的ID s,用逗号分隔。

输出预计上述样本数据:

employeename IDs 
Jane   1,4,6 
Peter   2,5 

有表中的其他列,我这样做没有任何要考虑此查询。

感谢您的帮助!

+0

必须有至少100副本(但我也懒得寻找他们)。 – 2013-05-13 15:51:21

select 
employeename, 
IDs = STUFF((SELECT ','+ CAST(e2.[ID] AS VARCHAR(10)) 
    FROM emp e2 
    WHERE e2.employeename = e1.employeename 
    For XML PATH('') 
),1,1,'') 
FROM emp e1 
GROUP BY employeename having COUNT(*) > 1 

SQL Fiddler

+0

谢谢@EricZ!这就是我一直在寻找的! – slayernoah 2013-05-13 21:38:51

+0

使用CTE怎么样? “与CTE一样(选择row_number()结束(由雇员按ID排序)从表中删除)” - 如何继续? – 2013-06-11 18:44:16

+0

@HelenCraigman,不知道你想用CTE做什么,查询显示行号。对于字符串连接,FOR XML是更好的方法。 – EricZ 2013-06-11 18:58:42

这里是一个罗斯文例如:这个问题的

Use Northwind 
GO 

SELECT 
    ord1.CustomerID, 
    OrderIdList = substring((SELECT (', ' + convert(varchar(16) , OrderID)) 
          FROM [dbo].[Orders] ord2 
          WHERE ord1.CustomerID = ord2.CustomerID 
          ORDER BY 
           CustomerID, 
           OrderID 
          FOR XML PATH('') 
         ), 3, 1000)FROM [dbo].[Orders] ord1 
GROUP BY CustomerID