0

私のSQLテーブルは以下のようになります

Code  Value  ID
A     100    1
A     200    2
A     300    3
B     200    1
B     500    2
B     600    3
C     800    1 
C     700    2
C     200    3

以下の形式で値を取得するためにSQLServer2008でクエリを作成する方法。

ID A    B    C
1  100  200  800
2  200  500  700
3  300  600  200 
4

3 に答える 3

3

SUMそのための関数を使用できます:

SELECT ID,
        SUM(CASE Code when 'A' then Value else 0 end)as A,
        SUM(CASE Code when 'B' then Value else 0 end)as B,
        SUM(CASE Code when 'C' then Value else 0 end)as C
FROM myTable
GROUP BY ID;

このSQLFiddleを参照してください

于 2012-09-10T10:41:44.683 に答える
2

PIVOTを使用する

select ID,[A],[B],[C]
from your_table T
PIVOT (MAX(Value) FOR Code in ([A],[B],[C]) )P


コードが固定されていない場合は、動的ピボットを使用できます。

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Code) 
                    from your_table
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT ID,  ' + @cols + '  
                from your_table
            pivot 
            (
                MAX([Value])
                for Code in (' + @cols + ')
            ) p '
print(@query)
execute(@query)
于 2012-09-10T10:35:00.463 に答える
1

答えはPIVOTです

DECLARE @t TABLE (Code varchar(10), Value int, Id int)

INSERT INTO @t VALUES
                    ('A',100,1),
                    ('A',200,2),
                    ('A',300,3),
                    ('B',200,1),
                    ('B',500,2),
                    ('B',600,3),
                    ('C',800,1),
                    ('C',700,2),
                    ('C',200,3);

SELECT ID,[A],[B],[C]
FROM @t
PIVOT (SUM(Value) FOR Code IN ([A],[B],[C]))P

結果

ID  A   B   C
1   100 200 800
2   200 500 700
3   300 600 200
于 2012-09-10T10:52:38.260 に答える