【发布时间】:2022-11-12 12:18:12
【问题描述】:
我正在尝试将我每几 KB 完成的列值 (Month_End) 旋转,但随后我还需要将其他列 (PAC_Contract、PAC_Projected_Cost、JTD_Actual) 还原为行值,但我感到困惑并且不确定 PIVOT 是否正确攻击这个。
SQL 2012
这是表
这就是我想要达到的
这是我目前所在的地方,但它似乎是风景优美的路线:)
DECLARE @columns NVARCHAR(MAX) = '',
@sql NVARCHAR(MAX) = '';
-- Get the last 3 Month End Dates
SELECT TOP 3
@columns += QUOTENAME(Month_End) + ','
FROM _rec_spectrum_CTC_Master
GROUP BY Month_End
ORDER BY Month_End desc;
-- Remove the last comma
SET @columns = LEFT(@columns, LEN(@columns) - 1);
PRINT @columns;
-- Construct the PIVOT
SET @sql ='
SELECT * FROM(
SELECT
Job_Number,
Month_End,
''PAC Contract'' AS Column_Name,
PAC_Contract AS Value
FROM _rec_spectrum_CTC_Master WHERE Job_Number = ''A1327''
UNION
SELECT
Job_Number,
Month_End,
''PAC Projected Cost'' AS Column_Name,
PAC_Projected_Cost AS Value
FROM _rec_spectrum_CTC_Master WHERE Job_Number = ''A1327''
UNION
SELECT
Job_Number,
Month_End,
''JTD_Actual_Cost'' AS Column_Name,
JTD_Actual_Cost AS Value
FROM _rec_spectrum_CTC_Master WHERE Job_Number = ''A1327''
) d
PIVOT(
SUM(Value)
FOR Month_End IN ('+ @columns +')
) AS ppc ;';
EXECUTE sp_executesql @sql
【问题讨论】:
标签: sql sql-server pivot unpivot