powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как перевернуть таблицу ?
14 сообщений из 14, страница 1 из 1
Как перевернуть таблицу ?
    #38436708
dp_cmb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поиском не нашел.
Подскажите, плиз, как мне из такой таблицы

date suma categoria10.10.2013 53000 Zarplata 110.10.2013 72000 Zarplata 212.10.2013 28000 Avans 113.10.2013 65000 Avans 210.10.2013 30000 Bonus 114.10.2013 53000 Zarplata 114.10.2013 72000 Zarplata 216.10.2013 28000 Avans 117.10.2013 65000 Avans 218.10.2013 53000 Zarplata 118.10.2013 72000 Zarplata 2

сделать вот такую

date/cat 10.10.2013 11.10.2013 12.10.2013 13.10.2013 14.10.2013 15.10.2013 16.10.2013 17.10.2013 18.10.2013 19.10.2013Zarplata 1 53000 - - - 53000 - - - 53000 - Zarplata 2 72000 - - - 72000 - - - 73000 - Bonus 1 30000 - - - - - - - - - Avans 1 - - 28000 - - - 28000 - - - Avans 2 - - - 65000 - - - 65000 - - Total 155000 0 28000 65000 125000 0 28000 65000 126000 0

Заранее спасибо.
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38436725
case + group by
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38436748
dp_cmb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

А пример можно ? Не могу что-то пока представить себе ....
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38436852
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dp_cmb,

Монитор лучше поверни на 90 градусов -- и всё делов...
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38436866
dp_cmbДобрый Э - Эх,

А пример можно ? Не могу что-то пока представить себе ....
Да легко...
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38436968
dp_cmb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Спасибо, пример хороший, немного помог, но появилось еще больше вопросов :)

Рассматриваю еще вариант другого преобразования исходной таблицы вот в такую

date Zarplata1 Avans1 Bonus1 Zarplata2 Avans2 Bonus2 Total10.10.2013 53000 0 0 72000 0 30000 15500012.10.2013 0 28000 0 0 0 0 2800013.10.2013 0 0 0 0 65000 0 6500014.10.2013 53000 0 0 72000 0 0 12500016.10.2013 0 28000 0 0 0 0 2800017.10.2013 0 0 0 0 65000 0 6500018.10.2013 53000 0 0 72000 0 0 125000

но получается вот так только

date Zarplata1 Avans1 Bonus1 Zarplata2 Avans2 Bonus210.10.2013 53000 0 0 0 0 010.10.2013 0 0 0 72000 0 012.10.2013 0 28000 0 0 0 013.10.2013 0 0 0 0 65000 025.10.2013 0 0 0 0 0 3000014.10.2013 53000 0 0 0 0 014.10.2013 0 0 0 72000 0 016.10.2013 0 28000 0 0 0 017.10.2013 0 0 0 0 65000 018.10.2013 53000 0 0 0 0 018.10.2013 0 0 0 72000 0 0

и Total не понял как прикрутить ...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT date, 
case when categoria = 10 then suma else 0 end as Zarplata1,
case when categoria = 11 then suma else 0 end as Avans1,
case when categoria = 12 then suma else 0 end as Bonus1,
case when categoria = 13 then suma else 0 end as Zarplata2,
case when categoria = 14 then suma else 0 end as Avans2,
case when categoria = 15 then suma else 0 end as Bonus2
FROM `prixod` 
WHERE date >= '2013-10-10' 
and date <= '2013-10-31'



Подскажите, плиз ..
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38436983
dp_cmb,

case засунуть внутрь агрегутной функции SUM, для тотала добавить строку безусловного суммирования. наложить нужный GROUP BY
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38437008
Добрый Э - Эхdp_cmb,

case засунуть внутрь агрегутной функции SUM, для тотала добавить строку безусловного суммирования. наложить нужный GROUP BYНу то есть как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT date, 
sum(case when categoria = 10 then suma else 0 end) as Zarplata1,
sum(case when categoria = 11 then suma else 0 end) as Avans1,
sum(case when categoria = 12 then suma else 0 end) as Bonus1,
sum(case when categoria = 13 then suma else 0 end) as Zarplata2,
sum(case when categoria = 14 then suma else 0 end) as Avans2,
sum(case when categoria = 15 then suma else 0 end) as Bonus2,
sum(suma) as Total
FROM `prixod` 
WHERE date >= '2013-10-10' 
and date <= '2013-10-31'
group by date
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38437043
dp_cmb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Спасибо большое, второй вариант работает на отлично, а вот в первом варианте как прикрутить Total нижней строкой с сумой столбца ?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
SELECT categoria, 
sum(case day(date) when  1 then suma else 0 end) as day_01,
sum(case day(date) when  2 then suma else 0 end) as day_02,
sum(case day(date) when  3 then suma else 0 end) as day_03,
sum(case day(date) when  4 then suma else 0 end) as day_04,
sum(case day(date) when  5 then suma else 0 end) as day_05,
sum(case day(date) when  6 then suma else 0 end) as day_06,
sum(case day(date) when  7 then suma else 0 end) as day_07,
sum(case day(date) when  8 then suma else 0 end) as day_08,
sum(case day(date) when  9 then suma else 0 end) as day_09,
sum(case day(date) when  10 then suma else 0 end) as day_10,
sum(case day(date) when  11 then suma else 0 end) as day_11,
sum(case day(date) when  12 then suma else 0 end) as day_12,
sum(case day(date) when  13 then suma else 0 end) as day_13,
sum(case day(date) when  14 then suma else 0 end) as day_14,
sum(case day(date) when  15 then suma else 0 end) as day_15,
sum(case day(date) when  16 then suma else 0 end) as day_16,
sum(case day(date) when  17 then suma else 0 end) as day_17,
sum(case day(date) when  18 then suma else 0 end) as day_18,
sum(case day(date) when  19 then suma else 0 end) as day_19,
sum(case day(date) when  20 then suma else 0 end) as day_20,
sum(case day(date) when  21 then suma else 0 end) as day_21,
sum(case day(date) when  22 then suma else 0 end) as day_22,
sum(case day(date) when  23 then suma else 0 end) as day_23,
sum(case day(date) when  24 then suma else 0 end) as day_24,
sum(case day(date) when  25 then suma else 0 end) as day_25,
sum(case day(date) when  26 then suma else 0 end) as day_26,
sum(case day(date) when  27 then suma else 0 end) as day_27,
sum(case day(date) when  28 then suma else 0 end) as day_28,
sum(case day(date) when  29 then suma else 0 end) as day_29,
sum(case day(date) when  30 then suma else 0 end) as day_30,
sum(case day(date) when  31 then suma else 0 end) as day_31
FROM `prixod` 
WHERE date >= '2013-10-01' 
and date < '2013-11-01'
group by categoria
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38437089
насколько помню, в MySQL нет расширенных агрегатов ROLLUP, CUBE и GROUPING SETS.
Остается старый добрый UNION ALL и двойное выполнение запроса: в верхней части UNION ALL формируем агрегацию с разбивкой по нужным группам, в нижней - просто суммируем все в одну кучу...

Схематично как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Select <any columns>, <any aggregation functions>
  from <table_name>
 where <conditions>
 group by <any columns>

UNION ALL

select 'TOTAL', <any aggregation functions>
  from <table_name>
 where <conditions>
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38437150
dp_cmb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Спасибо за ответы и советы, все получилось как и хотел. Теперь осталось выбрать вариант :))
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38437502
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эхнасколько помню, в MySQL нет расширенных агрегатов ROLLUP, CUBE и GROUPING SETS.
Остается старый добрый UNION ALL и двойное выполнение запроса: в верхней части UNION ALL формируем агрегацию с разбивкой по нужным группам, в нижней - просто суммируем все в одну кучу...

Схематично как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Select <any columns>, <any aggregation functions>
  from <table_name>
 where <conditions>
 group by <any columns>

UNION ALL

select 'TOTAL', <any aggregation functions>
  from <table_name>
 where <conditions>



ROLLUP есть и вполне работает (по крайней мере у нас на 5.5):

http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38437551
javajdbc,

ОК, буду иметь ввиду. :)
...
Рейтинг: 0 / 0
Как перевернуть таблицу ?
    #38437805
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

только grouping() нет, так что группировка по nullable колонкам - такое себе нетривиальное занятие (в плане понять потом, где тут "настоящий" null, а где от роллапа :) )
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как перевернуть таблицу ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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