【发布时间】:2021-08-03 04:19:51
【问题描述】:
我使用 XML 数据透视表将月份列转换为标题,并希望将其从最早的月份排序到当前月份,有人知道该怎么做吗?
代码如下:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT ','+ QUOTENAME(period_month) FROM updated_order_raw_data
FOR XML Path(''), TYPE).value('.','NVARCHAR(MAX)'),1,1,'')
-- the purpose of temp-table is for summarize the total
CREATE TABLE #temp_table (
order_id varchar(max),
total_amount numeric
)
INSERT INTO #temp_table
SELECT order_id, SUM(amount) as total_amount FROM updated_order_raw_data GROUP BY order_id
SET @query = 'SELECT * from
(
SELECT a.order_id, report_name, period_month, amount, b.total_amount as difference
FROM updated_order_raw_data a
LEFT JOIN #temp_table b
on a.order_id = b.order_id
) Src
PIVOT
(
SUM(amount)
FOR period_month IN (' + @cols + ')
) Piv
WHERE difference <> 0
ORDER BY order_id, report_name '
EXECUTE(@query)
-- Drop temp-table
DROP TABLE #temp_table
【问题讨论】:
-
您可以发送您的查询吗?
-
@TashilMoorateeah 我在上下文中添加了代码。
-
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或键入问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
-
@DaleK 感谢您的提醒,我会记住的。
-
定义@cols时可以下单
标签: sql sql-server tsql sql-order-by