我在SQL Server中有2个表,我想让它们成为最高枢纽,以便在更新一个表时立即创建一个新列

什里扬什·格赫鲁

目前,我正在以这种方式进行操作:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档