powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите составить запрос
7 сообщений из 7, страница 1 из 1
Помогите составить запрос
    #39108431
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня. Есть запрос вида:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select STUDY_SOURCE, sum(STUDY_LENGTH)
from STUDIES
where STUDY_ADDITION_DATE like "2014%"
group by STUDY_SOURCE
union
select "all", sum(STUDY_LENGTH)
from STUDIES
where STUDY_ADDITION_DATE like "2014%"    



Всё считается, как нужно, только в качестве результата хочется видеть sum(STUDY_LENGTH) для разных годов. То есть должна получится табличка типа:

Код: plaintext
1.
2.
3.
4.
5.
STUDY_SOURCE SUM2012 SUM2013 SUM2014 SUM2015
SRC1           10      10      10      10
SRC2           10      11      11      13
SRC3           7        8       8       9
ALL            27      29      29      32
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39108436
makhaon,

Суть желаемого - crosstab. Обычно решается силами клиента. Но если очень сильно охото напрячь именно сервер, то PIVOT, либо, при его отсутствии, CASE + GROUP BY
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39108437
Добрый Э - Эх... либо ... CASE + GROUP BY как пример реализации
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39108685
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

Спасибо! Попробую, отпишусь по результатам.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39108869
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select STUDIES.STUDY_SOURCE,
sum(case when STUDIES.STUDY_ADDITION_DATE like "2012%" then STUDIES.STUDY_LENGTH else null end) as Y2012,
sum(case when STUDIES.STUDY_ADDITION_DATE like "2013%" then STUDIES.STUDY_LENGTH else null end) as Y2013,
sum(case when STUDIES.STUDY_ADDITION_DATE like "2014%" then STUDIES.STUDY_LENGTH else null end) as Y2014,
sum(case when STUDIES.STUDY_ADDITION_DATE like "2015%" then STUDIES.STUDY_LENGTH else null end) as Y2015
from STUDIES
group by STUDY_SOURCE
union
select "all",
sum(case when STUDIES.STUDY_ADDITION_DATE like "2012%" then STUDIES.STUDY_LENGTH else null end) as Y2012,
sum(case when STUDIES.STUDY_ADDITION_DATE like "2013%" then STUDIES.STUDY_LENGTH else null end) as Y2013,
sum(case when STUDIES.STUDY_ADDITION_DATE like "2014%" then STUDIES.STUDY_LENGTH else null end) as Y2014,
sum(case when STUDIES.STUDY_ADDITION_DATE like "2015%" then STUDIES.STUDY_LENGTH else null end) as Y2015
from STUDIES



Всё получилось :) Спасибо!
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39108946
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,

если уж у тебя NULL в "иначе", то "else null" можно не писать, достаточно "then STUDIES.STUDY_LENGTH end"
и UNION сортирует твою выборку, выбрасывая дубликаты строк. возможно, UNION ALL будет уместнее.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39120593
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

Спасибо за дополнения! Поколдую еще по запросу. Вообще - то сортировка и отбрасывание как раз и нужно. Но - посмотрю еще.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите составить запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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