Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL-如何为每个员工选择和分组多个记录(在多个列中)?_Sql_Sql Server_Join_Distinct - Fatal编程技术网

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

T-SQL-如何为每个员工选择和分组多个记录(在多个列中)?,sql,sql-server,join,distinct,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 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
是一个唯一的字段。同一员工在多列中列出了多个地址。还有许多其他列包含每个员工的唯一数据,我在上面的示例表中没有包含这些数据。例如,电话号码、电子邮件等

如何按员工的名字和姓氏对每个员工的多个记录进行分组?我试图加入,但没有得到想要的结果。我也不知道如何通过只在名字和姓氏上运行DISTINCT并从多个列中显示每个员工的相关数据来返回所需的结果。

您可以这样做:

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\u name
Last\u name
分组的结果,并将地址分隔开

请在此处查看它的实际操作:

这将为您提供:

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

名字和姓氏是唯一的吗?他们完全不可能是两个约翰·史密斯吗?如果一个给定的(名字、姓氏)对有多行,你想显示/保留哪一行?你想为每个
名字
姓氏
选择哪个地址?或者您想将它们分组到一个值中吗?当您按名字和姓氏分组时,您的预期输出是什么?您不能根据First_u和Last_u名称分组,而只需要两行(在给定的示例中)。你认为地址会怎么样?DataId?名字和姓氏的组合是唯一的,但在表中有多条记录是针对同一个John Smith的。我想为John Smith提取所有唯一地址、电话、电子邮件等记录,并以John Smith的姓名只显示一次的方式显示,并在其下方显示所有相关地址、电子邮件和电话号码。希望这是有意义的。我收到错误“Msg 4121,16级,状态1,第1行。找不到列“t1”或用户定义函数或聚合“t1.last_name”,或者名称不明确。“@user2561860-应该可以正常工作,请查看,请检查列的名称,或者您可以编辑该演示并显示您遇到的问题