首页 > 解决方案 > SQL 如何按照以下格式显示结果

问题描述

我在 SQL Server 2014 中有一个包含 2 列的表,如下所示

ObjectName   Whitelist
 A           Field1,Field2,Field3
 B           Field1,Field2

使用下面的查询我设法打印结果如下

SELECT  ObjectName,
LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS WhiteList
FROM
(
SELECT ObjectName,CAST('<XMLRoot><RowData>' + REPLACE(WhiteList,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM  dbo.testtable
)t
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)

使用上述查询的实际结果

ObjectName WhiteList
A          Field1
A          Field2
A          Field3
B          Field1
B          Field2

预期结果

A           B   
Field1     Field1
Field2     Field2
Field3 

标签: sqlsql-server

解决方案


您需要使用Pivot将行转换为列。

Pivot 更容易在固定列上实现。

对于动态列,根据结果,您可以编写动态查询来获得结果。

在 Stackoverflow 的答案中有很好的解释: Efficiently convert rows to columns in sql server


推荐阅读