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-应该可以正常工作,请查看,请检查列的名称,或者您可以编辑该演示并显示您遇到的问题