Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как склеить столбцы в строку у GROUP BY? / 5 сообщений из 5, страница 1 из 1
21.06.2007, 11:29
    #34610035
GolemXIV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как склеить столбцы в строку у GROUP BY?
задача: есть объекты со свойствами, необходимо получить список сочетаний свойств и количество таких объектов (в принципе количество свойств ограничено, но переборный вариант очень не хочется реализовывать).

Например:
таблица: 1 '10', 1 '20', 3 '10', 3 '20', 4 '11', 7 '10', 7 '20', 7 '11'
результат
'10 20' 2шт
'10 20 11' 1шт
'11' 1шт

есть ли какой-то разумный способ сгруппировав таблицу по первому полю получить промежуточный результат вида
1 '10 20'
2 '10 20'
3 '11'
7 '10 20 11'
?
...
Рейтинг: 0 / 0
21.06.2007, 11:31
    #34610041
GolemXIV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как склеить столбцы в строку у GROUP BY?
извините, конечно

1 '10 20'
3 '10 20'
4 '11'
7 '10 20 11'
...
Рейтинг: 0 / 0
21.06.2007, 11:46
    #34610123
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как склеить столбцы в строку у GROUP BY?
может поможет рекурсивный SQL
...
Рейтинг: 0 / 0
21.06.2007, 12:17
    #34610290
Alexey Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как склеить столбцы в строку у GROUP BY?
Приверно так:
Код: plaintext
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.
WITH Q1(ID, NAME)
AS (
VALUES( 1 , '10'), ( 1 , '20'), ( 1 , '30'), ( 3 , '10'), ( 3 , '20'), ( 4 , '11')),

Q2(NUM, ID, NAME)
AS (
SELECT ROW_NUMBER() OVER(PARTITION BY Q1.ID), Q1.ID, Q1.NAME
FROM Q1),

Q3(NUM, ID, NAME)
AS (
SELECT Q2.NUM, Q2.ID, CAST(Q2.NAME AS VARCHAR( 128 ))
FROM Q2
WHERE Q2.NUM =  1 
UNION ALL
SELECT Q2.NUM, Q2.ID, CAST(Q3.NAME || ' ' || Q2.NAME AS VARCHAR( 128 ))
FROM Q2, Q3
WHERE Q2.ID = Q3.ID AND Q2.NUM - Q3.NUM =  1 ),

Q4(ID, NUM)
AS (
SELECT Q3.ID, MAX(Q3.NUM)
FROM Q3
GROUP BY Q3.ID)

SELECT Q3.ID, Q3.NAME
FROM Q3
WHERE EXISTS(SELECT Q4.ID
        FROM Q4
        WHERE Q4.ID = Q3.ID AND Q4.NUM = Q3.NUM)
ORDER BY ID
...
Рейтинг: 0 / 0
22.06.2007, 08:32
    #34612614
GolemXIV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как склеить столбцы в строку у GROUP BY?
Спасибо! Будем учиться строить рекурсивные SQL.
Можно обойтись без Q4, SELECT ID, MAX(NAME) FROM Q3 GROUP BY ID вроде достаточно.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как склеить столбцы в строку у GROUP BY? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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