2016-08-01 2 views
0

Мне нужна помощь с проблемой в IBM Informix 12.10. база данных.SQL select - Group by и concatenate (no group_concat)

CREATE TABLE toys(product VARCHAR(255), colour VARCHAR(255)); 
INSERT INTO toys (product, colour) 
VALUES ('balloon', 'red'), 
('balloon', 'white'), 
('balloon', 'green'), 
('balloon', 'yellow'), 
('rubber duck', 'yellow'), 
('rubber duck', 'white'); 

Я пробовал STUFF, GROUP_CONCAT и LISTAGG.

Initial table: "toys" 

product  | colour 
----------------------- 
balloon  | red 
balloon  | green 
balloon  | white 
balloon  | yellow 
rubber duck | yellow 
rubber duck | white 

Полученная таблица должна выглядеть, как эта:

product  | colours 
----------------------- 
balloon  | red, green, white, yellow 
rubber duck | yellow, white 

Большое спасибо за вашу помощь!

+1

В каких СУБД для этого? Добавьте тег, чтобы указать, используете ли вы 'mysql',' postgresql', 'sql-server',' oracle' или 'db2' - или что-то еще. –

+0

Uhm, это база данных Informix ... На данный момент я не знаю больше. – LordGhettofaust

+0

Просто подсказка, вам нужно предоставить более подробную информацию, чем «не работает». Включите то, что вы пробовали, сообщения об ошибках и коды и т. Д. Даже, казалось бы, незначительные детали могут предоставить информацию, которая может быть использована для решения проблемы. –

ответ

0

В Oracle listagg() функция выполняет трюк. Надеемся, что Informix выполняет аналогичную функцию:

SQL> column PRODUCT format A20 
SQL> column COLOURS format A40 
SQL> with tbl(product, colour) as (
    select 'balloon', 'red' from dual union 
    select 'balloon', 'green' from dual union 
    select 'balloon', 'white' from dual union 
    select 'balloon', 'yellow' from dual union 
    select 'rubber duck', 'yellow' from dual union 
    select 'rubber duck', 'white' from dual 
    ) 
    select product, listagg(colour, ', ') within group (order by colour) as colours 
    from tbl 
    group by product; 

PRODUCT    COLOURS 
-------------------- ---------------------------------------- 
balloon    green, red, white, yellow 
rubber duck   white, yellow 

SQL> 
+0

пользователь не имеет права или объект не найден: LISTAGG :-( – LordGhettofaust

+0

Попробуйте это, может быть, https://github.com/jOOQ/jOOQ/issues/1276. Вам также придется самостоятельно искать некоторые вещи, чтобы попытаться эмулировать с функциональностью Informix обеспечивает Помните, чтобы получить возможность отправлять обратно ответ, как только вы найдете его для будущих искателей удачи –

+0

Хмм «пользователь не имеет привилегий или объект не найден: XMLSERIALIZE».!. 'выберите продукт, SUBSTR (xmlserialize (xmlagg (xmltext (concat (',', color))) как varchar (1024)), 3) от игрушек группа по продукту Подстрока выглядит странно, на мой взгляд. – LordGhettofaust