sql - 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
解决方案
您需要使用Pivot
将行转换为列。
Pivot 更容易在固定列上实现。
对于动态列,根据结果,您可以编写动态查询来获得结果。
在 Stackoverflow 的答案中有很好的解释: Efficiently convert rows to columns in sql server
推荐阅读
- http - 禁用身份验证时如何为 Oracle HTTP 会话设置 remote_user
- jquery - 在 h2 部分之后使用特定单词捕获 h2 部分
- api - 赛普拉斯 - 通过请求登录
- php - Laravel 流明版本控制
- java - 使用工厂模式的动态依赖注入 - Spring
- android - 如何在批处理文件中使用 ADB 打开 Windows 文件资源管理器窗口
- c# - 如何使用 Json.Net 通过自定义序列化修补现有对象?
- sql - 根据条件复制记录
- wordpress - 仅将 WordPress 与 Next.js 一起用于某些路径
- android - 是否可以设计一个应用程序来告诉我我的孩子在他的设备上使用了多少时间。