Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как перевернуть таблицу ? / 14 сообщений из 14, страница 1 из 1
22.10.2013, 12:35:41
    #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
22.10.2013, 12:43:24
    #38436725
Как перевернуть таблицу ?
case + group by
...
Рейтинг: 0 / 0
22.10.2013, 12:52:56
    #38436748
dp_cmb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевернуть таблицу ?
Добрый Э - Эх,

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

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

А пример можно ? Не могу что-то пока представить себе ....
Да легко...
...
Рейтинг: 0 / 0
22.10.2013, 14:29:38
    #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
22.10.2013, 14:40:05
    #38436983
Как перевернуть таблицу ?
dp_cmb,

case засунуть внутрь агрегутной функции SUM, для тотала добавить строку безусловного суммирования. наложить нужный GROUP BY
...
Рейтинг: 0 / 0
22.10.2013, 14:52:13
    #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
22.10.2013, 15:10:14
    #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
22.10.2013, 15:29:57
    #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
22.10.2013, 16:02:45
    #38437150
dp_cmb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевернуть таблицу ?
Добрый Э - Эх,

Спасибо за ответы и советы, все получилось как и хотел. Теперь осталось выбрать вариант :))
...
Рейтинг: 0 / 0
22.10.2013, 19:11:39
    #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
22.10.2013, 19:59:30
    #38437551
Как перевернуть таблицу ?
javajdbc,

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

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


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