SQL中数据的并排比较

时间:2012-02-16 19:59:41

标签: sql comparison

检查了一些类似的帖子,但他们都有一个共同的ID,但这些并非如此,我希望你能帮助我。

我想要实现的目标是:

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个结果(每个季度与其他三个季度进行比较.qtr1和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

为了获得两种数据类型并聚合销售。

1 个答案:

答案 0 :(得分: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语句将每个季度与每个其他季度进行比较。