Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / преобразование строк в столбцы / 16 сообщений из 16, страница 1 из 1
15.10.2013, 14:52:10
    #38428308
drum-devil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
Доброго времени суток. очень прошу Вас о помощи!
Очень прошу о помощи!

дана таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ID		ATTRIB		VAL_INT		VAL_STR
-------------------------------------------------------------
1		  A		   - 		  AA
1		  B		   -		  BB
1		  C                95   	  -

2		  A	           -		  AAA
2		  B		   -		  BBB
2		  C		   96		  -
2		  D		   -	          DDD

3		  A		   -              AAAA
3 		  B		   -	          BBBB
3		  C		   97             -
3		  E		   -              EEEE



нужно получить таблицу следующего вида:

Код: plsql
1.
2.
3.
4.
5.
ID	A	B	C	  D	E
_________________________________________________
1       AA      BB      95        -     -
2       AAA     BBB     96        DDD	-
3       AAAA	BBBB    97        -     EEEE
...
Рейтинг: 0 / 0
15.10.2013, 15:38:46
    #38428380
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
5 штук LEFT JOIN
...
Рейтинг: 0 / 0
15.10.2013, 15:59:22
    #38428426
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
Akina5 штук LEFT JOINЗачем???
GROUP BY + 5 x IF()
...
Рейтинг: 0 / 0
15.10.2013, 16:34:03
    #38428497
drum-devil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
Akina,

а можно чуть по подробнее?
...
Рейтинг: 0 / 0
15.10.2013, 16:50:40
    #38428514
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select ID
  , min(if(ATTRIB='A',VAL_STR,NULL))A
  , min(if(ATTRIB='B',VAL_STR,NULL))B
  , min(if(ATTRIB='C',VAL_INT,NULL))C
  , min(if(ATTRIB='D',VAL_STR,NULL))D
  , min(if(ATTRIB='E',VAL_STR,NULL))E
from myTable
group by ID
...
Рейтинг: 0 / 0
15.10.2013, 17:26:57
    #38428565
drum-devil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
Cygapb-007,

Жалуется,что нет правой скобки)) хотя все скобки закрыты....
...
Рейтинг: 0 / 0
15.10.2013, 18:58:56
    #38428682
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
drum-devilCygapb-007,

Жалуется,что нет правой скобки)) хотя все скобки закрыты....Сказочник, млин((
http://sqlfiddle.com/#!2/f0742b/1
...
Рейтинг: 0 / 0
15.10.2013, 19:03:36
    #38428685
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
может, дело в пробелах между закрывающими скобками и названиями столбцов?
...
Рейтинг: 0 / 0
15.10.2013, 19:05:45
    #38428691
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
не, скорее при адаптации после ID запятую воткнул
...
Рейтинг: 0 / 0
15.10.2013, 19:08:40
    #38428695
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
Cygapb-007,

Почему MIN() а не MAX()? А если таких атрибутов непонятно сколько (до 255 к примеру)? :)

Мне кажется, что свернуть через GROUP_CONCAT() в json-строку правильнее, а потом уже разворачивать на клиенте. Нет?
...
Рейтинг: 0 / 0
15.10.2013, 19:14:07
    #38428698
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
Arhat109Cygapb-007,

Почему MIN() а не MAX()? А если таких атрибутов непонятно сколько (до 255 к примеру)? :)

Мне кажется, что свернуть через GROUP_CONCAT() в json-строку правильнее, а потом уже разворачивать на клиенте. Нет?Вообще пофиг, MIN, MAX, AVG - там всего по одному значению будет (по построению таблицы).

Другое дело, что сводные отчеты действительно проще строить на клиенте, чем в SQL, потому что если атрибутов непонятно сколько - то в SQL единственный выход - динамика. А на клиенте (при обработке массива, а не реляционной таблицы) все делается довольно легко.
...
Рейтинг: 0 / 0
15.10.2013, 19:21:11
    #38428705
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
Cygapb-007Вообще пофиг, MIN, MAX, AVG - там всего по одному значению будет (по построению таблицы).Не совсем так. AVG нельзя использовать в данном методе для нечисловых полей (для VAL_STR).
...
Рейтинг: 0 / 0
15.10.2013, 20:55:59
    #38428797
drum-devil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
Всем большое спасибо.Как найду решение,отпишусь!
...
Рейтинг: 0 / 0
16.10.2013, 00:13:21
    #38428947
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
miksoftCygapb-007Вообще пофиг, MIN, MAX, AVG - там всего по одному значению будет (по построению таблицы).Не совсем так. AVG нельзя использовать в данном методе для нечисловых полей (для VAL_STR).
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select ID
  , min(if(ATTRIB='A',VAL_STR,NULL))A
  , max(if(ATTRIB='B',VAL_STR,NULL))B
  , avg(if(ATTRIB='C',VAL_INT,NULL))C
  , group_concat(if(ATTRIB='D',VAL_STR,NULL))D
  , min(if(ATTRIB='E',VAL_STR,NULL))E -- не хватило возможностей :)
from myTable
group by ID
...
Рейтинг: 0 / 0
16.10.2013, 07:35:04
    #38429095
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
Cygapb-007,

Я к тому, что часто в реализациях модели EAV не контролируются повторные попадания значений параметров в таблички, а констрейн полноценно наложить нельзя... и вот если там будет внезапно не по одному значению... то выбор агрегатной функции может оказаться очень даже критичным.

А если сворачивать в json структуры и разворачивать на клиенте - все косяки хранения можно отдать туда и пусть у клиента голова болит.

Ну и потрындеть: очень плохо что в Мускуле нет нормальных средств для таких запросов... :)
...
Рейтинг: 0 / 0
16.10.2013, 08:05:34
    #38429105
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строк в столбцы
Arhat109,

Согласен, GROUP_CONCAT может оказаться более приемлемым решением, чем MIN/MAX, тем более явное преобразование в строку — но ощущается чуть более сложным :)

Да и PIVOT обычно раскрывается через MIN/MAX, нет там GROUP_CONCAT ;)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / преобразование строк в столбцы / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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