移调与SQL表(Transposing a table with SQL)

2019-09-30 15:02发布

我有一个SQL表像这样


PV      Area    CouterParty

851     M010    Name1

561     M011    Name2

869     M012    Name3
...

我需要transpost它,使用T-SQL(不报告服务或其他任何东西),所以它看起来是这样的:

CounterParty M010 M011 M012 .... 

Name1        851 

Name2             561 

Name2                  869 

问题是,我不知道有多少区号都会有,所以有可能是任何数量的列真。

任何想法如何,我可以做到这一点? 非常感谢畅想

Answer 1:

你将不得不做一个动态交叉,检查这些文章:

  • SQLServer的:动态交叉表
  • 动态交叉表/透视表
  • 交叉表数据透视表工作台
  • SQL动态交叉存储过程


Answer 2:

你可以通过游标循环和一个临时表做到这一点。

选择所有的你区号,运行光标获取每行插入行到您的临时表中的需要紧密光标从临时表中选择



Answer 3:

如果使用SQL Server 2005或最新的使用旋转功能

SELECT 
    CouterParty ,
    [M010] ,
    [M011],
    [M012]
FROM    ( SELECT    
            PV ,Area    ,CouterParty
          FROM      TablesName AS T
        ) AS T1Temp PIVOT ( Sum(PV) FOR T1Temp.CouterParty IN ( [M010],
                                                          [M011],
                                                          [M012] ) )  As PivotTable


文章来源: Transposing a table with SQL