Параллельное сравнение данных в SQL - PullRequest
0 голосов
/ 16 февраля 2012

Проверил несколько похожих постов, но у них у всех был общий идентификатор, и их нет, поэтому я надеюсь, что вы мне поможете.

Чего я хочу добиться, так это:

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 Ответ

2 голосов
/ 17 февраля 2012

Если я правильно понимаю проблему, вот пример решения:

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 сравнивает каждый квартал с каждым вторым кварталом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...