powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / запрос
9 сообщений из 9, страница 1 из 1
запрос
    #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
запрос
    #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
запрос
    #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
запрос
    #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
запрос
    #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
запрос
    #32010297
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>IMHO должно быть так, вообще без where, т.к. ограничение есть в самой функции SUM()

В общем то да, но Ваш первый вариант лучше, т. к. ограничивает набор выбранных данных, а во втором примере сервер будет перебирать всю таблицу.
...
Рейтинг: 0 / 0
запрос
    #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
запрос
    #32010318
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 zamm

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


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