Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Работы с терминалами MySQL / 4 сообщений из 4, страница 1 из 1
03.12.2017, 14:30
    #39563268
moran102
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работы с терминалами MySQL
Работа с банкоматами. Есть поля - id, name, numbr, currency, endcash. Для каждого банкомата есть Numbr - это номер кассеты(от 1 до 4), при каждом numbr свой различный endcash и currency. Надо вывести запросом одну строку по каждому банкомату. Вот часть кода:

select id,
name,
(case when numbr = 1 then endcash else null end) as cassette_1_endcash,
(case when numbr = 1 then currency else null end) as cassette_1_currency,
(case when numbr = 2 then endcash else null end) as cassette_2_endcash,
(case when numbr = 2 then currency else null end) as cassette_2_currency,
(case when numbr = 3 then endcash else null end) as cassette_3_endcash,
(case when numbr = 3 then currency else null end) as cassette_3_currency,
(case when numbr = 4 then endcash else null end) as cassette_4_endcash,
(case when numbr = 4 then currency else null end) as cassette_4_currency
from(какой-то подзапрос, где нет чего-то важного)
group by id,name,numbr
order by id

Проблема в том, что он выводит все в 4 строки(см. фото), так как Numbr у всех endcash и currency разный, а надо, чтобы одному банкомату была присвоена одна строка, т.е у одного id и name 4 кассеты с разными номерами и разными endcash и currency в одну строчку. Надо как-то сделать через групповые функции(подозреваю, что через sum),но не совсем понимаю как. Заранее извиняюсь за фотку, возможности скрин сделать не было. Выручайте!
...
Рейтинг: 0 / 0
03.12.2017, 14:33
    #39563269
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работы с терминалами MySQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select id, 
name,
sum(case when numbr = 1 then endcash else 0 end) as cassette_1_endcash,
sum(case when numbr = 1 then currency else 0 end) as cassette_1_currency,
sum(case when numbr = 2 then endcash else 0 end) as cassette_2_endcash,
sum(case when numbr = 2 then currency else 0 end) as cassette_2_currency,
sum(case when numbr = 3 then endcash else 0 end) as cassette_3_endcash,
sum(case when numbr = 3 then currency else 0 end) as cassette_3_currency,
sum(case when numbr = 4 then endcash else 0 end) as cassette_4_endcash,
sum(case when numbr = 4 then currency else 0 end) as cassette_4_currency
from(какой-то подзапрос, где нет чего-то важного)
group by id,name
order by id
...
Рейтинг: 0 / 0
03.12.2017, 14:36
    #39563271
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работы с терминалами MySQL
А если в банкомате станет больше кассет? Будете все запросы и отчеты переделывать?
...
Рейтинг: 0 / 0
03.12.2017, 15:11
    #39563277
moran102
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работы с терминалами MySQL
miksoft, спасибо вам! делаю эту задачу уже неделю(там еще проблемы с подзапросом были, но справился) и так зациклился на одном глупом способе решения, что совсем не увидел очевидного. кассет вообще 8 всегда, но сказали делать только по 4 первым(ибо только они заполнены). еще раз спасибо!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Работы с терминалами MySQL / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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