Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / запрос / 9 сообщений из 9, страница 1 из 1
24.07.2001, 13:35
    #32010233
Giaour
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
Есть запрос такого вида:
select value1, sum(value2) from table1 where value3 = 1 group by value1
И еще такой запрос:
select value1, sum(value2) from table1 where value3 = 2 group by value1

можно ли объединить их в 1, в котором были бы 3 столбца?
1) первый столбец из первого запроса
2) второй столбец из первого запроса
3) второй столбец из второго запроса
...
Рейтинг: 0 / 0
24.07.2001, 14:01
    #32010238
Olga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
что-то в этом роде

select
a.value1,
(select sum(value2) from table1 where value3 = 1 and value1=a.value1) as sum_value2_1,
(select sum(value2) from table1 where value3 = 2 and value1=a.value1) as sum_value2_2
from table1 a
...
Рейтинг: 0 / 0
24.07.2001, 14:28
    #32010240
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
select value1,
sum(case when value3=1 then value2 else 0 end),
sum(case when value3=2 then value2 else 0 end)
from table1 where value3 in(1, 2)
group by value1
...
Рейтинг: 0 / 0
25.07.2001, 06:55
    #32010280
zamm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
Основой здесь является 1-ый запрос, к нему добавляется дополнительный столбец, а посему надо в условии where оставить value3 = 1

select value1,
sum(case when value3=1 then value2 else 0 end),
sum(case when value3=2 then value2 else 0 end)
from table1 where value3 = 1
group by value1
...
Рейтинг: 0 / 0
25.07.2001, 07:24
    #32010285
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
2zamm
Как же у вас рассчитается 2-ая сумма, если вы накладываете ограничение на весь запрос where value3 = 1. В этом случае в выборке не будет ни одной записи , где value3 = 2

IMHO должно быть так, вообще без where, т.к. ограничение есть в самой функции SUM()

select value1,
sum(case when value3=1 then value2 else 0 end),
sum(case when value3=2 then value2 else 0 end)
from table1
group by value1
...
Рейтинг: 0 / 0
25.07.2001, 08:07
    #32010297
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
>IMHO должно быть так, вообще без where, т.к. ограничение есть в самой функции SUM()

В общем то да, но Ваш первый вариант лучше, т. к. ограничивает набор выбранных данных, а во втором примере сервер будет перебирать всю таблицу.
...
Рейтинг: 0 / 0
25.07.2001, 11:15
    #32010316
zamm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
2Glory:
Грешен, лажанулся, поспешил.
Но смысл моего замечания был в том, что за основу должен браться 1-ый запрос, где value3=1. Но теперь, трезво рассудив, ясно осознал, что такого в принципе быть не может.
В качестве реабилитации предлагаю использоват union

select value1 as val, sum(value2) as sum from table1 where value3 = 1 group by value1
union
select value1 as val, sum(value2) as sum from table1 where value3 = 2 group by value1
...
Рейтинг: 0 / 0
25.07.2001, 11:27
    #32010318
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
2 zamm

Опять мимо, по условию каждая сумма должна быть в своем столбце
...
Рейтинг: 0 / 0
25.07.2001, 15:25
    #32010360
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
IMHO, самый первый ответ Glory был в самую точку.
2 Zamm: Лучшее - враг хорошего .
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / запрос / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]