2016-07-14 11 views
0

次の状況で問題が発生します。ステートメントに4つの位置を選択する必要があり、この位置を列としてピボットする必要があります。 = 55 STATEMENTIDため例えばSTATEMENTID 1、PositionId 2、RepCurrValue 3及び位置のため= 58 OR 62 OR 67 OR 82の結果は次のとおり:データベースは、次のように構成されSQL Server 2012のPIVOT - 新しいSQL

1 2 3 
----------------- 
55 58 146,8000 
55 62 59,9800 
55 67 800,0500 
55 82 136,7600 

と私はそれになりたいです

1 58  62  67  82 
--------------------------------------- 
55 146,8000 59,9800 800,0500 136,7600 

ご協力いただきありがとうございます。

答えて

0

私は、フィールドの内容に等しい列見出しを考えると、あなたを助けることができ、ピボットテーブルでこの運動をした[2]と列で繰り返される値を提供していない[2]:

DECLARE @cols AS NVARCHAR(MAX) 

SET @cols = STUFF((SELECT ',[' + convert(nvarchar,(t.[2])) + ']' AS ID 
FROM TB_1 t 
    FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1,1, '') 

DECLARE @query AS NVARCHAR(MAX); 

SET @query = N'SELECT p.[1],' + @cols + N' from 
      (
       SELECT [1],[2],[3] FROM TB_1 
      ) x 
      pivot 
      (
       max([3]) 
       for [2] in (' + @cols + N') 
      ) p 

      ' 
exec sp_executesql @query; 
STATEMENTIDに関連する追加STATEMENTID(56)と新たな異なる位置(90,91)を加算した結果を以下

は、(56)

1 58   62  67   82   90  91 
55 146,8000 59,9800 800,0500 136,7600 NULL NULL 
56 NULL  NULL NULL  NULL  185,74 185,74 

非動的溶液とすることができる:

select * 
from 
(
    SELECT [1],[2],[3] FROM TB_1 
) x 
pivot 
(
    max([3]) 
    for [2] in ([58] , [62] , [67] , [82]) 
) p