2017-03-02 9 views
0

として動的な列を作成し、私は次のサンプルのように動的な列を作成するときにトラブルを抱えている:SQL Server 2008のトラブルサンプル現在

ColumnA Mon_Year Value 
    'A'  8/2016  2 
    'B'  8/2016  3 
    'A'  9/2016  4 
    'B'  9/2016  5 
    'B'  10/2016  6 

私はこのような形式を持つテーブルを持つようにしたいもの:

ColumnA 8/2016 9/2016 10/2016 
    'A'  2  4   0 
    'B'  3  5   6 

私は月ごとにtmpテーブルを作成して列を追加しようとしましたが、正しい結果が得られません。

これを解決するお手伝いはありますか?

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

答えて

1

ピボットを使用できます。以下の私のコードを参照してください。希望、私の友人:)

create table Test(ColumnA varchar(10), Month_Year date, Value int) 

insert into Test values('A', '2016/08/10', 2) 
insert into Test values('B', '2016/08/10', 3) 
insert into Test values('A', '2016/09/10', 4) 
insert into Test values('B', '2016/09/10', 5) 

DECLARE @cols NVARCHAR(MAX) 
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(FORMAT(Month_Year, 'MM/yyyy')) 
       FROM (SELECT DISTINCT Month_Year FROM test) x ORDER BY Month_Year FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'') 

DECLARE @query NVARCHAR(MAX) 
SET @query = 'SELECT * FROM 
      (
      SELECT ColumnA, FORMAT(Month_Year, ''MM/yyyy'') AS Month_Year, Value 
      FROM test 
      ) x 
      PIVOT 
      (
       SUM(Value) 
       FOR Month_Year IN (' + @cols + ') 
      ) p;' 

EXEC SP_EXECUTESQL @query 
+0

ええ、ありがとう、あなたのコードをチェックさせてください。 –