powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / преобразование строк в столбцы
16 сообщений из 16, страница 1 из 1
преобразование строк в столбцы
    #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
преобразование строк в столбцы
    #38428380
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5 штук LEFT JOIN
...
Рейтинг: 0 / 0
преобразование строк в столбцы
    #38428426
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina5 штук LEFT JOINЗачем???
GROUP BY + 5 x IF()
...
Рейтинг: 0 / 0
преобразование строк в столбцы
    #38428497
drum-devil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

а можно чуть по подробнее?
...
Рейтинг: 0 / 0
преобразование строк в столбцы
    #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
преобразование строк в столбцы
    #38428565
drum-devil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,

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

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

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

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

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

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

Другое дело, что сводные отчеты действительно проще строить на клиенте, чем в SQL, потому что если атрибутов непонятно сколько - то в SQL единственный выход - динамика. А на клиенте (при обработке массива, а не реляционной таблицы) все делается довольно легко.
...
Рейтинг: 0 / 0
преобразование строк в столбцы
    #38428705
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007Вообще пофиг, MIN, MAX, AVG - там всего по одному значению будет (по построению таблицы).Не совсем так. AVG нельзя использовать в данном методе для нечисловых полей (для VAL_STR).
...
Рейтинг: 0 / 0
преобразование строк в столбцы
    #38428797
drum-devil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо.Как найду решение,отпишусь!
...
Рейтинг: 0 / 0
преобразование строк в столбцы
    #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
преобразование строк в столбцы
    #38429095
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007,

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

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

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

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

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


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