0

SQL 2005

私は一時テーブルを持っています:

 Year         PercentMale   PercentFemale  PercentHmlss   PercentEmployed  TotalSrvd
 2008           100                0           0              100              1
 2009           55                40           0               80             20
 2010           64                35           0               67            162
 2011           69                27           0               34            285
 2012           56                43          10                1             58

次のようなデータを表示するクエリを作成したいと思います。

                    2008    2009    2010    2011    2012
 PercentMale         100     55      64      69      56 
 PercentFemale        -      40      35      27      43 
 PercentHmlss         -      -       -       -       10 
 PercentEmployed     100     80      67      34      1 
 TotalSrvd            1      20     162     285      58 

これを実現するためにピボット テーブルを使用できますか? もしそうなら、どのように?ピボットを使用してみましたが、成功しませんでした。

 select PercentHmlss,PercentMale,Percentfemale,
     PercentEmployed,[2008],[2009],[2010],[2011],[2012] from 

 (select PercentHmlss,PercentMale, Percentfemale, PercentEmployed,
     TotalSrvd,year from @TempTable)as T

  pivot (sum (TotalSrvd) for year 
     in ([2008],[2009],[2010],[2011],[2012])) as pvt

結果は次のとおりです。

 PercentHmlss   PercentMale     Percentfemale PercentEmployed [2008]  [2009]    [2010]      [2011]   [2012]
    0               55              40            80           NULL     20      NULL         NULL     NULL
    0               64              35            67           NULL    NULL     162            NULL  NULL
    0               69              27            34           NULL    NULL     NULL          285     NULL
    0              100               0           100             1     NULL     NULL         NULL    NULL
   10               56              43             1           NULL    NULL     NULL         NULL     58

ありがとう。

4

1 に答える 1

3

これを機能させるには、UNPIVOTを実行してからPIVOTを実行する必要があります。

SELECT *
from
(
  select year, quantity, type
  from 
  (
    select year, percentmale, percentfemale, percenthmlss, percentemployed, totalsrvd
    from t
  ) x
  UNPIVOT 
  (
    quantity for type
    in 
    ([percentmale]
     , [percentfemale]
     , [percenthmlss]
     , [percentemployed]
     , [totalsrvd])
  ) u
) x1
pivot
(
  sum(quantity)
  for Year in ([2008], [2009], [2010], [2011], [2012])
) p

デモで SQL Fiddle を見る

編集 詳しい説明:

Year必要な列形式でデータを取得したという点で、試した PIVOT クエリに近づいていました。ただし、最初percentmalepercentfemale、 などの列に含まれていたデータがデータの行に必要なため、最初にデータのピボットを解除する必要があります。

基本的に、元のデータを取得して、年に基づいてすべての行に配置しています。UNPIVOT は、データを次の形式 ( Demo )に配置します。

Year    Quantity    Type
2008    100         percentmale
2008    0           percentfemale
etc

データをこの形式に変換したら、PIVOT を実行して目的の結果を得ることができます。

于 2012-07-06T22:57:30.123 に答える