Отображение результатов запроса SELECT - из той же таблицы - бок о бок - PullRequest
0 голосов
/ 19 августа 2011

У меня есть SQL-запрос, который я просто не могу отобразить так, как я хочу. По сути, у нас есть таблица, полная транзакций, и я хотел бы получить сумму (для определенного типа транзакций), купленную с февраля этого года до сих пор. Вот запрос для этого:

select sum(amount) as "2011" from transactions
where transaction_type = 'registration'
and date_entered > '2011-02-01'
and date_entered < GetDate()

Теперь я также хотел бы увидеть сумму тех же транзакций, но за предыдущий год:

select sum(amount) as "2010" from transactions
where transaction_type = 'registration'
and date_entered > '2010-02-01'
and date_entered < DateAdd(yy, -1, GetDate())

То, что я не могу понять, это как получить эти суммы бок о бок. Я пробовал UNION all, но они отображаются в отдельных строках, а не в столбцах.

select sum(amount) as "2011" from transactions
where transaction_type = 'registration'
and date_entered > '2011-02-01'
and date_entered < GetDate()
UNION all
select sum(amount) as "2010" from transactions
where transaction_type = 'registration'
and date_entered > '2010-02-01'
and date_entered < DateAdd(yy, -1, GetDate())

Я также читал здесь о переполнении стека, что PIVOT может быть вариантом, но я пока не видел пример, который мог бы манипулировать / настраивать для запросов выше.

Любые предложения о том, как я могу получить эти данные бок о бок? Я уверен, что пропускаю что-то простое.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Вы хотите "свод", который по сути является вычислением формы sum(test * amount).
Вот как сделать поворот в вашем случае:

select
    sum(case when date_entered between '2011-02-01' and < GetDate() then amount else 0 end) as "2011",
    sum(case when date_entered between '2010-02-01' and DateAdd(yy, -1, GetDate() then amount else 0 end) as "2010"
from transactions
where transaction_type = 'registration';
0 голосов
/ 19 августа 2011

Быстрое и уродливое решение заключается в следующем:

SELECT (
select sum(amount) as "2011" from transactions
where transaction_type = 'registration'
and date_entered > '2011-02-01'
and date_entered < GetDate() ) as '2011',
(select sum(amount) as "2010" from transactions
where transaction_type = 'registration'
and date_entered > '2010-02-01'
and date_entered < DateAdd(yy, -1, GetDate())) as '2010'

Вы можете использовать это для одноразового запроса, но это, безусловно, то, что я хочу добавить в производственную систему.Хороший пример на PIVOT:.

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