【问题标题】:Pivot\Unpivot issues?Pivot\Unpivot 问题?
【发布时间】:2016-11-08 18:49:00
【问题描述】:

我有以下数据

Col1,  Col2,  Col3, Col4, Col5                         
1, P,  W, M, adhfggh                 
1, P,  W, M, fdasdfd                    
1, P,  W, M, retretre

所以,我想得到这个

Col1,  Col2,  Col3, Col4, ColA, ColB, ColC         
1, P,  W, M, adhfggh, fdasdfd, retretre

我应该尝试这样的事情,但不知道括号里放什么

select Col1, Col2, Col3, Col4, Col5 from tableA         
Unpivot 
( Col1,  Col2,  Col3, Col4 for Col5 in (, , ) ) as UnPvt

感谢您的帮助。

【问题讨论】:

  • 您使用的是哪个 DBMS?

标签: sql pivot unpivot


【解决方案1】:

您没有指定您使用的 SQL 版本,因此这是 T-SQL,并且可以在 2008 年之后的任何 SQL Server 上运行。

这个动态轴是altered from this answer 并且将根据您的要求进行格式化。您可能还希望查看STUFF 函数

    CREATE TABLE #T
                  (  Col1 int 
                    ,Col2 [nchar](3) 
                    ,Col3 [nchar](3)
                    ,Col4 [nchar](3)
                    ,Col5 [nchar](10)
                    )

    Insert Into #T
    Values
    (1,'P','W','M','adhfggh')
    ,(1,'P','W','M','fdasdfd')
    ,(1,'P','W','M','retretre');

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

    SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.Col5) 
                       FROM #T c
                       FOR XML PATH(''), TYPE
                       ).value('.', 'NVARCHAR(MAX)') 
                       ,1,1,'')

    set @query = 'SELECT Col1,Col2,Col3,Col4, ' + @cols + ' from 
        (
            select  Col1,   
                    Col2,  
                    Col3,
                    Col4,
                    Col5                       
            from #T     
        ) x
        pivot 
        (
             max(Col5)
            for Col5 in (' + @cols + ')
        ) p '


    execute(@query)

    drop table #T

【讨论】:

  • 感谢您的帮助,但我想知道是否可以只使用查询...。SELECT WHERE FROM without variables (T-SQL)...
  • 如果你想旋转Col5,你需要知道有多少行。如果您将始终拥有相同数量的行,例如“3 行”,那么是的,这是可能的。如果您的行数多于/少于 3 行,则需要使用动态 SQL 并且需要变量
  • Col5 可以有 1 到 3 行...你能告诉我如果总是有 3 行它会是什么样子吗?让我们看看我们为其他两列设置 Null 值的示例,以防只有一行具有值。
  • 实际上,我将始终有 3 列 ...ColA、ColB、ColC 但有时它们的 Null 值取决于我有多少行...谢谢
  • 没有名为“SQL 2012”的SQL标准版本,你碰巧指的是“SQL Server 2012”吗?
猜你喜欢
  • 2021-12-18
  • 2016-02-21
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
相关资源
最近更新 更多