2017-02-06 14 views
0

3列の結果セットを作成しようとしています。各列は表Aの1列の合計から来るが、異なるIDによってグループ化される。ここで私は、私は、これはUNIONを使用して得ることができないことを理解し、私はのようなものを作りたかったT-SQL集計

Table A 
ID  Val.1  
1   4 
1   5 
1   6 
2   7 
2   8 
2   9 
3   10 
3   11 
3   12 

私がやりたいことの概要..

ROW  SUM.VAL.1   SUM.VAL.2   SUM.VAL.3 
1   15     21    33 

だ、私は、CTEを使用して考えていましたロジックではあまり確かではありません。

+0

あなたはどのように変化するかを、多くの異なるIDをお持ちになる値、または意志事前に知っていますか? – Jerrad

+0

集約後にピボットを使用する必要があります。 https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx –

+0

@Jerrad IDは静的です。私は3つの異なるIDしか持っていません。 –

答えて

2

あなたはID'sの数は静的でない場合は、ダイナミッククロスタブやピボットを必要とする場合があり、条件付き集計

select 1 as Row, 
     sum(case when ID = 1 then Val.1 end), 
     sum(case when ID = 2 then Val.1 end), 
     sum(case when ID = 3 then Val.1 end) 
From yourtable 

が必要

DECLARE @col_list VARCHAR(8000)= Stuff((SELECT ',sum(case when ID = '+ Cast(ID AS VARCHAR(20))+ ' then [Val.1] end) as [val.'+Cast(ID AS VARCHAR(20))+']' 
        FROM Yourtable 
        GROUP BY ID 
        FOR xml path('')), 1, 1, ''), 
     @sql  VARCHAR(8000) 

exec('select 1 as Row,'[email protected]_list +'from Yourtable') 
+0

こんにちは@Prdp!あなたの最初の提案は働いた:) 私は私のIDのための静的な値を持っています。データは非常に小さいです。どうもありがとうございました!! –

0

私はデータテーブルをピボットすると、望ましい結果が得られると思います。

IF OBJECT_ID('tempdb..#TableA') IS NOT NULL 
    DROP TABLE #TableA 

CREATE TABLE #TableA 
(
    RowNumber INT, 
    ID INT, 
    Value INT 
) 
INSERT #TableA VALUES (1, 1, 4) 
INSERT #TableA VALUES (1, 1, 5) 
INSERT #TableA VALUES (1, 1, 6) 
INSERT #TableA VALUES (1, 2, 7) 
INSERT #TableA VALUES (1, 2, 8) 
INSERT #TableA VALUES (1, 2, 9) 
INSERT #TableA VALUES (1, 3, 10) 
INSERT #TableA VALUES (1, 3, 11) 
INSERT #TableA VALUES (1, 3, 12) 

-- https://msdn.microsoft.com/en-us/library/ms177410.aspx 

SELECT RowNumber, [1] AS Sum1, [2] AS Sum2, [3] AS Sum3 
FROM 
(
    SELECT RowNumber, ID, Value 
    FROM #TableA 
) a 
PIVOT 
(
    SUM(Value) 
    FOR ID IN ([1], [2], [3]) 
) AS p 

このテクニックは、あなたが求めているIDが一定であれば動作しますが、そうでない場合は、私が変更IDが必要とされている場合、一部のdyanmic-SQLは同様に働くだろうと想像します。

https://msdn.microsoft.com/en-us/library/ms177410.aspx