SQL合并行转换为CSV但选择某些数据类型而不是所有表数据

时间:2018-04-13 19:59:42

标签: sql csv join sql-server-2008-r2 union

在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

1 个答案:

答案 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中执行此操作的方法。