T-SQL - 如何为每个员工选择和分组多个记录(在多列中)?

时间:2013-07-08 18:30:51

标签: sql sql-server join distinct

我们有一个如下表格:

DATAID Last_Name    First_Name   ADDRESS
1         Smith        John         5000 Street
2         Smith        John         6666 Street
3         Doe          Jim          1111 Street
4         Doe          Jim          2222 Street

如您所见,DATAID是一个独特的领域。同一员工在多个列中列出了多个地址。还有许多其他列,每个员工都有唯一的数据,我没有在上面的示例表中包含这些数据。例如,电话号码,电子邮件等

如何按员工的名字和名字为每位员工分组多条记录?我试着做一个JOIN并没有得到理想的结果。我也无法通过仅运行DISTINCT on first_name and last_name并从多列显示每位员工的相关数据来弄清楚如何返回所需结果。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

SELECT 
  t1.First_Name,
  t1.Last_Name,
  STUFF((
    SELECT ', ' + t2.Address
    FROM Tablename AS t2
    WHERE t1.First_Name = t2.First_name AND t1.Last_Name = t2.Last_Name
    FOR XML PATH(''))
  ,1,2,'') AS Address
FROM tablename AS t1
GROUP BY t1.First_Name,
         t1.Last_Name;

这将为您提供按First_nameLast_Name分组的结果,地址为逗号分隔。

请在此处查看:

这会给你:

| FIRST_NAME | LAST_NAME |                  ADDRESS |
-----------------------------------------------------
|        Jim |       Doe | 1111 Street, 2222 Street |
|       John |     Smith | 5000 Street, 6666 Street |