2012-02-16 75 views
0

檢查了一些類似的帖子,但他們都有一個共同的ID,這些不這樣做,我希望你能幫助我。SQL中的數據並排比較

我想實現的是:

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 

等了所有值一共拿到12個結果(每季度相比其他三個季度的第1季度和qtr2只是到。區分列)。我現在能做的只是季度的產品...

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

但是,當我在資金從收益表中添加了宿舍SUM(收益)查詢掛起並無法完成。盈利表連接到由代理鍵含宿舍的日期表,因此,最好它必須是

FROM datedim, earningsfact 

爲了得到這兩種數據類型和彙總銷售。

+0

我不明白目前是指QTR1和QTR2,爲什麼應該有12個結果? – Lamak 2012-02-16 20:07:41

+0

您能否澄清一下您的預期結果應該是什麼樣子?看起來你試圖在你的桌子上進行笛卡兒自我加入。所以,「QTR1」列並不意味着datedim.quarter = 1,這是否正確? – 2012-02-16 20:10:09

回答

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

我很抱歉,我沒有說清楚銷售數據是在一個單獨的事實表中。 – 2012-02-16 20:30:38

+0

啊,好的,只要您可以按季度總結所有銷售數據(沒有並行比較),則可以將公用表表達式中的select替換爲您的查詢,最後選擇我的示例將完成其餘的工作 – 2012-02-16 20:35:30