2012-02-16 50 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