0

いくつかの値を列にピボットしようとしていますが、それらをすべて同じ行にすることはできません。ピボット クエリを具体的に記述する方法があるかどうか、またはそれらに参加しようとしている方法に問題があるかどうかはわかりません。あなたはおそらく私よりもよく知っているので、Stackoverflow、私は私のひどい試みを省き、それを説明しようとします...

    select 
    [CARRIAGE_ID]
   ,[PUBLISH_FLAG]
   ,[COUNTER_PRESCRIBED]
   ,[ADT] AS 'ADT2008'
   ,[AWT] AS 'AWT2008'
   ,[AWE] AS 'AWE2008'
   from [RISSxplr].[dbo].[ADT_MAP_FACT]
   pivot (max([FIGURE]) FOR COUNT_TYPE IN ([ADT],[AWT],[AWE])) AS pCountType
   WHERE [COUNT_YEAR] = 2008    

(サンプル)のような結果が得られます:

CARRIAGE_ID  PUBLISH_FLAG  COUNTER_PRESCRIBED  ADT2008   AWT2008  AWE2008
  10041           1                P            NULL      NULL     36800
  10041           1                P            NULL      46400    NULL
  10041           1                P            43000     NULL     NULL

これらはすべて同じ CARRIAGE_ID を共有しており、必要なのはすべて同じ行にあるため、次のようになります。

  CARRIAGE_ID  PUBLISH_FLAG  COUNTER_PRESCRIBED  ADT2008   AWT2008  AWE2008
     10041          1               P             43000     46400    36800

しかし、私はそれを実現できないようです。助けてください!そして、いつもありがとう。

編集: ADT_MAP_FACT からサンプル データを追加します

CARRIAGE_ID COUNT_TYPE  COUNT_YEAR  FIGURE  NUMBER_DAYS PUBLISH_FLAG    COUNTER_PRESCRIBED
    10041       ADT        2008      43000      341           1               P
    10041       ADT        2009      43400      292           1               P
    10041       ADT        2010      44000      314           1               P
    10041       ADT        2011      43300      341           1               P
    10041       ADT        2012      42700      354           1               P
    10041       AWE        2008      36800      95            1               P
    10041       AWE        2009      36800      81            1               P
    10041       AWE        2010      37900      87            1               P
    10041       AWE        2011      37000      98            1               P
    10041       AWE        2012      36500      98            1               P
    10041       AWT        2008      46400      192           1               P
    10041       AWT        2009      46900      162           1               P
    10041       AWT        2010      47100      185           1               P
    10041       AWT        2011      46900      189           1               P
    10041       AWT        2012      46600      198           1               P
4

2 に答える 2

1

集計とGROUP BY:が必要なだけです。

SELECT
    [CARRIAGE_ID]
   ,[PUBLISH_FLAG]
   ,[COUNTER_PRESCRIBED]
   ,MAX([ADT]) AS 'ADT2008'
   ,MAX([AWT]) AS 'AWT2008'
   ,MAX([AWE]) AS 'AWE2008'
FROM [RISSxplr].[dbo].[ADT_MAP_FACT]
PIVOT (MAX([FIGURE]) FOR COUNT_TYPE IN ([ADT],[AWT],[AWE])) AS pCountType
WHERE [COUNT_YEAR] = 2008 
GROUP BY     [CARRIAGE_ID]
            ,[PUBLISH_FLAG]
            ,[COUNTER_PRESCRIBED]

デモ: SQL フィドル

于 2013-09-05T03:22:51.210 に答える