在SQL Server 2008 R2中,有一种方法可以通过仅选择特定的AttributeID来创建类似于此示例表的逗号分隔输出
表:
EntryID | AttributeID | Description
===================================================
1 | 5 | OrgName
1 | 15 | OrgDescription
1 | 25 | OrgEmail
1 | 26 | FieldName
2 | 5 | OrgName
2 | 15 | OrgDescription
3 | 5 | OrgName
3 | 26 | FieldName
选择所有EntryID,但仅选择属性ID 5,15,25(不是26)
期望的示例输出:
EntryID | Description
===================================================
1 | OrgName,OrgDescrption,OrgEmail
2 | OrgName,OrgDescrption,
3 | OrgName,
我可以使用以下查询以逗号分隔格式获取整个表的输出,但它包含所有AttributeID。在这个查询块中是否有一个地方可以指定像Select这样的东西,只组合AttributeIDs 5,15,25并排除所有其他的AttributeID?或者是否有一种更简单的方法而不使用XML东西?
(SELECT EntryID, Description =
STUFF((SELECT DISTINCT ',' + Description
FROM Table b
WHERE b.EntryID = a.EntryID
FOR XML PATH('')), 1, 2, '')
FROM Table a
GROUP BY EntryID)
输出显示所有数据(不需要的):
EntryID | Description
===================================================
1 | OrgName,OrgDescrption,OrgEmail,FieldName
2 | OrgName,OrgDescrption,
3 | OrgName,FieldName
答案 0 :(得分:0)
在AND AttributeID IN (5,15,25)
:
STUFF
SELECT EntryID, Description =
STUFF((SELECT DISTINCT ',' + Description
FROM Table b
WHERE b.EntryID = a.EntryID
AND b.AttributeID IN (5,15,25)
FOR XML PATH('')), 1, 1, '') --Change to 1,1 unless you need to skip two chars
--Or if you want a space after the commas ', '
FROM Table a
GROUP BY EntryID
STUFF
几乎就是在SQL Server 2008中执行此操作的方法。