目前,我正在以这种方式进行操作:
WITH PivotData AS
(
SELECT
[acctrefno]
,LSC.status_code
,1 AS Qty
FROM [NLS].[dbo].[loanacct_statuses] LS
INNER JOIN loan_status_codes LSC ON LSC.status_code_no = LS.status_code_no
)
SELECT acctrefno, [120 DPD],
[150 DPD],
[180 DPD],
[30 DPD],
[60 DPD],
[90 DPD],
FROM PivotData
PIVOT( SUM(Qty) FOR Status_code IN([120 DPD],
[150 DPD],
[180 DPD],
[30 DPD],
[60 DPD],
[90 DPD],
)) AS P
但是问题是列名是硬编码的,请您帮忙进行此SQL查询,以便每当导入新的status_code时,它都会自动为Pivot创建一个新列。即我不想在查询中写列的名称。
预先感谢您的时间和精力。
然后,您将只能使用Dynamic SQL。
存在潜在的问题...这是列的顺序,请注意,order by DaysPastDue
这是正确顺序的占位符。
示例(由于未提供示例数据,因此显然未经过测试)
Declare @SQL varchar(max) = '
Select *
From (
SELECT [acctrefno]
,LSC.status_code
,1 AS Qty
FROM [NLS].[dbo].[loanacct_statuses] LS
JOIN loan_status_codes LSC ON LSC.status_code_no = LS.status_code_no
) A
Pivot (sum([Qty]) For [status_code] in (' + stuff((Select ','+QuoteName(status_code)
From (Select Distinct
status_code
From loan_status_codes
Order by DaysPastDue Desc
) A
For XML Path('')),1,1,'') + ') ) p'
Exec(@SQL);
--Print @SQL
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句