2012-02-16 4 views
0

Проверено несколько похожих сообщений, но все они имеют общий идентификатор, и это не так, я надеюсь, что вы поможете мне.Бок о бок Сравнение данных в 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 результатов (каждый квартал по сравнению с тремя другими каюту 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 

Для того, чтобы получить оба типа данных и агрегированные продажи.

+0

Я не понимаю, что в настоящее время означает QTR1 и QTR2, и почему должно быть 12 результатов? – Lamak

+0

Не могли бы вы прояснить, какими должны быть ваши ожидаемые результаты? Кажется, что вы пытаетесь сделать декартовое самоуправление на своем столе. Итак, столбцы «QTR1» НЕ означают, что yesimim.quarter = 1, это правильно? –

ответ

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

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

+0

ах, хорошо, так как до тех пор, пока вы можете суммировать все данные о продажах поквартально (без побочного сравнения), вы можете заменить выбор в общем выражении таблицы своим запросом, а окончательный выбор в моем пример сделает все остальное –

Смежные вопросы