sql - 如何按升序排列 SQL 数据透视表的列
问题描述
有人可以帮我按升序排列列。
我的数据透视表输出如下:
Ref role_name offer_id 10000 104000 8000 8400
43132_43282 Call Center 1 1 0 0 6
43132_43282 Others 1 2 0 0 3
相反,我希望它像:
Ref role_name offer_id 8000 8400 10000 104000
43132_43282 Call Center 1 0 6 1 0
43132_43282 Others 1 0 3 2 0
DECLARE @cols AS NVARCHAR(MAX), -- for pivot
@cols2 AS NVARCHAR(MAX), -- for select
@query AS NVARCHAR(MAX);
SET @cols = STUFF((
SELECT DISTINCT ',' + QUOTENAME(c.[Offer_cover])
FROM #cover2 c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
-- this is for the SELECT
SET @cols2 = STUFF((
SELECT DISTINCT ',' + 'ISNULL(' + QUOTENAME(c.[Offer_cover]) + ', 0) ' + QUOTENAME(c.[Offer_cover])
FROM #cover2 c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = 'SELECT Ref,role_name,offer_id, ' + @cols2 + ' from
(
select *
from #cover2
) x
pivot
(
SUM(cover_earning_Count)
for [Offer_cover] in (' + @cols + ')
) p'
EXECUTE (@query)
解决方案
您可以GROUP BY, ORDER BY [Offer_cover]
在@cols2
变量选择中添加 并删除DISTINCT
.
所以查询将是:
SET @cols2 = STUFF((
SELECT ',' + 'ISNULL(' + QUOTENAME(c.[Offer_cover]) + ', 0) ' + QUOTENAME(c.[Offer_cover])
FROM #cover2 c
GROUP BY c.[Offer_cover] -- changes here
ORDER BY c.[Offer_cover] -- changes here
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
它将@cols2
按升序返回,因此会影响最终结果。
推荐阅读
- c# - 如何为每个异步操作创建一个新上下文并以线程安全的方式使用它来存储一些数据
- matrix - 减去 SSRS 中矩阵表中的组列
- java - 将模拟推送到远程 Wiremock 服务器失败并出现“JSON Parsing”错误
- javascript - 导入节点模块时出现 ImportError
- python - 如何从 arcgis 10.2 发行版在 python 2.7 解释器上安装 psycopg2
- python - 如何将新字典添加到字典python中的现有键
- parent - Cytoscape.js - 更改父节点的大小
- python - 是否有 Python 包允许针对我可以通过 conda 安装的 Newcomb-Benford 发行版执行 Kolmogorov Smirnov 测试?
- javascript - 如何使用 javascript 变量作为 html 的 div id?
- visual-studio-code - 为什么在 VS Code 中打开 Google Chrome 窗口?