2012-02-16 11 views
0

類似のポストを確認しましたが、すべて共通のIDを持っていましたので、私はあなたを助けてくれることを願っています。SQL内のデータの並列比較

私は何を達成したいことはこれです:。その上のすべての値が(各四半期は、他の三つの四半期と比較して12件の結果の合計を取得するためには

QTR1 | QTR2 | SUM(Sales) | SUM(Sales2) 

1  2   9   8 
1  3   9   7 
1  4   9   6 
2  1   8   9 
2  3   8   7 

そしてQTR1とQTR2は、単にあります列を区別する)。私が損益表からSUM(利益)はクエリがハングアップし、決して完了四半期の合計に追加するときに、私は現在、ちょうど四半期...

SELECT d1.quarter 'qtr1' , a.quarter 'qtr2' 
FROM datedim d1, datedim a 
WHERE a.quarter <> d1.quarter 
GROUP BY a.quarter, d1.quarter; 

の製品を行うことができますが。収益テーブルは代理キーによる四半期を含む日付テーブルに接続されているので、理想的には、両方のデータ型を取得し、売上を集計するために

FROM datedim, earningsfact 

なければなりません。

+0

QTR1とQTR2が現在何を意味しているのか分からず、なぜ12の結果が得られるのでしょうか? – Lamak

+0

期待される結果がどのように見えるかを明確にしてください。テーブルのデカルトセルフジョインをしようとしているようです。ですから、 "QTR1"列はdatedim.quarter = 1という意味ではありませんが、それは正しいですか? –

答えて

2

ここでは例のソリューションです、私は問題を正しく理解と仮定:

declare @test table ([year] int, [quarter] int, sales money) 

insert into @test values (2001, 1, 1100) 
insert into @test values (2001, 2, 2100) 
insert into @test values (2001, 3, 3100) 
insert into @test values (2001, 4, 4100) 
insert into @test values (2002, 1, 1200) 
insert into @test values (2002, 2, 2200) 
insert into @test values (2002, 3, 3200) 
insert into @test values (2002, 4, 4200) 
insert into @test values (2003, 1, 1300) 
insert into @test values (2003, 2, 2300) 
insert into @test values (2003, 3, 3300) 
insert into @test values (2003, 4, 4300) 

; with summary (quarter, salesTotal) as 
(
    select quarter, sum(sales) 
    from @test 
    group by [quarter] 
) 

select 
    s1.quarter [QTR1] 
    , s2.quarter [QTR2] 
    , s1.salesTotal [SUM(Sales1)] 
    , s2.salesTotal [SUM(Sales1)] 
from 
    summary s1 
    join summary s2 
     on s1.quarter != s2.quarter 
order by 
    s1.quarter 
    , s2.quarter 

それはあなたが複数年の四半期データを持っていることを前提としています。共通テーブル式はすべてを四半期にまとめ、selectステートメントは各四半期を他の四半期と比較します。

+0

お詫び申し上げますが、私は販売データが別のファクトテーブルにあることを明確にしていませんでした。 –

+0

ああ、そうです。すべての売上データを四半期ごとに要約できれば(並んで比較する必要はありません)、共通テーブル式の選択をクエリに置き換えることができます。例は残りを行います –