0

行を列に変換する select ステートメントに行き詰まりました。PIVOT で試してみましたが、単一の列を変換できました。しかし、私の要件は少し異なります。以下の要件について説明しました。

私は以下のようなテーブル構造を持っています、

ここに画像の説明を入力

以下のようにデータを選択したいのですが、

ここに画像の説明を入力

テーブル内の値は動的ですが、これを処理するのは問題ではありません。しかし、以下の結果を得る方法が必要です。

以下のPIVOTを変更する方法かもしれません。

 select *  
 from   
 (  
   select TSID,AID,Count,BID
   from tbl TS
   WHERE TS.TPID = 1  
 ) src  
 pivot  
 (  
   sum(Count)
   for AID in (AID1,AID2,AID3)  
 ) piv 

ありがとうございました..

4

1 に答える 1

1

あなたはこのフィドルをチェックすることができます

編集 これは、以前に知られていない列名に対して機能します

DECLARE @Columns AS VARCHAR(MAX)
DECLARE @SQL AS VARCHAR(MAX)
SELECT @Columns = STUFF(( SELECT DISTINCT ',' + AID
                  FROM Table1 
                FOR
                  XML PATH('')
                ), 1, 1, '')
SET @SQL = '
;WITH MyCTE AS
(
  SELECT  TSID,
          AID,
          STUFF(( SELECT '','' + CONVERT(VARCHAR,[Count] )
                  FROM Table1 I Where I.TSID = O.TSID
                FOR
                  XML PATH('''')
                ), 1, 1, '''') AS CountList
  FROM    Table1 O
  GROUP BY TSID,
          AID
 )

SELECT *
  FROM  MyCTE
PIVOT
(
  MAX(CountList)
  FOR AID IN 
  (
    ' + @Columns + '
  )
) AS PivotTable'



EXEC(@SQL)
于 2013-08-01T07:11:04.187 に答える