【问题标题】:MS SQL - Join Multiple PivotsMS SQL - 加入多个枢轴
【发布时间】:2020-07-03 16:24:09
【问题描述】:

我正在尝试将多个枢轴合并为一个语句。请您帮忙。

SELECT ID, A as [LglCode-A],B as [LglCode-B],C as [LglCode-C],D as [LglCode-D] from 
             (
                select ID,LglFlg, Code
                from #tmp1
            ) x
            pivot 
            (
                max(Legal)
                for Code in ([A],[B],[C],[D])
            ) p; 

SELECT ID, A as [MH Code-A],B as [MH Code-B],C as [MH Code-C],D as [MH Code-D] from 
             (
                select ID,[MH Code], Code
                from #tmp1
            ) x
            pivot 
            (
                max([MH Code])
                for Code in ([A],[B],[C],[D])
            ) p; 

我从链接中看到了这种方法,这是唯一更好的方法吗? MS SQL Pivot Another Table Multiple Times

【问题讨论】:

  • 编辑您的问题并显示示例数据和所需结果。

标签: sql sql-server database pivot


【解决方案1】:

我建议进行条件聚合。我认为这可以满足您的要求:

select id,
       max(case when Code = 'A' then lglflg end) as legal_a,
       max(case when Code = 'B' then lglflg end) as legal_b,
       max(case when Code = 'C' then lglflg end) as legal_c,
       max(case when Code = 'D' then lglflg end) as legal_d,
       max(case when Code = 'A' then [MH Code] end) as mh_a,
       max(case when Code = 'B' then [MH Code] end) as mh_b,
       max(case when Code = 'C' then [MH Code] end) as mh_c,
       max(case when Code = 'D' then [MH Code] end) as mh_d
from #tmp1
group by id;

【讨论】:

  • 不,我想将枢轴合并为一条语句
  • @Dilip 。 . .这比使用pivot 所做的任何事情都非常简单。我不建议为此使用pivot
【解决方案2】:

您可以尝试以下方法:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((select distinct ', 
            MAX(CASE WHEN [Code]=''' + CAST([Code] as varchar(10)) + ''' THEN [Legal] ELSE 0 END) AS [LglCode-' + CAST([Code] as varchar(10)) + '],
            MAX(CASE WHEN [Code]=''' + CAST([Code] as varchar(10)) + ''' THEN [MH Code] ELSE 0 END) AS [MH Code-' + CAST([Code] as varchar(10)) + ']'
            /*---------------You can add other columns here similarly--------------*/
            FROM #tmp1 
            FOR XML PATH(''),type).value('.','varchar(max)'),1,2,'')

SET @query = 'SELECT ID, ' + @Cols + '  FROM #tmp1 group by ID' 

--print (@query)
exec(@query)

您可能需要在这里和那里进行一些更改,因为这里没有可用的测试数据。

【讨论】:

  • 这就是我想要的,谢谢。我可以学习这些陈述的任何来源?
  • @Dilip 谢谢!您可以找到更多详细信息here
猜你喜欢
  • 2012-09-23
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
相关资源
最近更新 更多