powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Объединение записей по 1 полю
6 сообщений из 6, страница 1 из 1
Объединение записей по 1 полю
    #37384986
Rust()
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пусть есть таблица:
NUMBVAL1VAL21v11v212v21v222v21v232v22v243v31v32
Необходимо сделать выборку (стандартами SQL) по полю NUMB с объединением остальных полей. То есть каждая строка результата по полю NUMB должна быть в единственном экземпляре, а остальные строки объединялись:
NUMBVAL1VAL21v11v212v21 v22v22 v33 v243v31v32
...
Рейтинг: 0 / 0
Объединение записей по 1 полю
    #37385078
xz321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Объединение записей по 1 полю
    #37385089
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
with a (numb, val1, val2) as (values
  ( 1 , 'v11', 'v21')
, ( 2 , 'v21', 'v22')
, ( 2 , 'v21', 'v23')
, ( 2 , 'v22', 'v24')
, ( 3 , 'v31', 'v32')
)
, b(rn, numb, val1, val2) as (
select rownumber() over(partition by numb) rn, numb, val1, val2
from a
), c (rn, numb, val1, val2) as (
select rn, numb, cast(val1 as varchar( 128 )) val1, cast(val2 as varchar( 128 )) val2
from b
where rn= 1 
  union all
select b.rn, b.numb
, c.val1 || case locate(' '||b.val1||' ', ' '||c.val1||' ') when  0  then ' '||b.val1 else '' end val1
, c.val2 || case locate(' '||b.val2||' ', ' '||c.val2||' ') when  0  then ' '||b.val2 else '' end val2
from c, b
where b.numb=c.numb and b.rn=c.rn+ 1 
)
select c.numb, c.val1, c.val2
from c
join (
select numb, max(rn) rn
from c
group by numb
) g on g.numb=c.numb and g.rn=c.rn
order by c.numb
...
Рейтинг: 0 / 0
Объединение записей по 1 полю
    #37385291
Rust()
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xz321 http://mysite.verizon.net/Graeme_Birchall/id1.html
Возьму на вооружение при ответах на этом форуме на любой вопрос
...
Рейтинг: 0 / 0
Объединение записей по 1 полю
    #37385297
Rust()
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,спасибо, как всегда грамотно-мудрено.. а этот запрос пойдет на других СУБД?
...
Рейтинг: 0 / 0
Объединение записей по 1 полю
    #37393525
sadsad_at_tomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rust(),

Код: 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.
WITH a (numb, val1, val2)
     AS (VALUES ( 1 , 'v11', 'v21'),
                ( 2 , 'v21', 'v22'),
                ( 2 , 'v21', 'v23'),
                ( 2 , 'v22', 'v24'),
                ( 3 , 'v31', 'v32')),
     b (numb, v1, v2)
     AS (SELECT numb,
                CASE
                   WHEN lag (val1) OVER (ORDER BY numb, val1) = val1
                   THEN
                      NULL
                   ELSE
                      val1
                END
                   AS v1,
                val2
           FROM a)
SELECT numb,
       LTRIM(XMLCAST (XMLGROUP (' ' || v1 AS a ORDER BY v1) AS VARCHAR ( 100 )))
          AS v1,
       LTRIM(XMLCAST (XMLGROUP (' ' || v2 AS b ORDER BY v2) AS VARCHAR ( 100 )))
          AS v2
  FROM b
GROUP BY numb
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Объединение записей по 1 полю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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