【问题标题】:Side-by-Side Comparison of data in SQLSQL 中数据的并排比较
【发布时间】:2012-02-16 19:59:41
【问题描述】:

查看了一些类似的帖子,但他们都有一个共同的 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(earnings) 的总和时,查询挂起并且永远不会完成。收入表通过代理键连接到包含季度的日期表,因此理想情况下它必须是

FROM datedim, earningsfact

为了获取这两种数据类型并汇总销售额。

【问题讨论】:

  • 不明白目前QTR1和QTR2是什么意思,为什么要12个结果?
  • 您能否说明您的预期结果应该是什么样子?您似乎正在尝试在您的桌子上进行笛卡尔自联接。那么,“QTR1”列并不意味着 datedim.quarter = 1,对吗?

标签: sql comparison


【解决方案1】:

假设我正确理解了问题,这里有一个示例解决方案:

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 语句将每个季度与其他季度进行比较。

【讨论】:

  • 抱歉,我没有明确说明销售数据在单独的事实表中。
  • 啊,好吧,只要你能按季度汇总所有销售数据(还没有并排比较),你可以用你的查询替换公用表表达式中的select ,我的示例中的最终选择将完成剩下的工作
猜你喜欢
  • 1970-01-01
  • 2018-06-01
  • 2017-03-19
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2015-12-22
  • 2019-07-17
  • 1970-01-01
相关资源
最近更新 更多