powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / написать SQL
8 сообщений из 8, страница 1 из 1
написать SQL
    #34470112
не могу сообразить как написать следующую выборку

допустим есть исходная табличка с 2 колонками :
COLUMN1 COLUMN2
a&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspas
a&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp sd
a &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdf
b &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspfg
b &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspgh
d &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp hj

Нужно выбрать в следующем виде
a &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp as,sd,df
b &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspfg, gh
d &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsphj
...
Рейтинг: 0 / 0
написать SQL
    #34470244
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понятен принцип, по которому вы формируете выборку.
Я не уловил логики...
...
Рейтинг: 0 / 0
написать SQL
    #34470672
mekhos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Набор символов во втором столбце выборки откуда берется?
...
Рейтинг: 0 / 0
написать SQL
    #34471430
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Mark Barinstein & mekhos
Парни, вы меня удивляете...
Разве не понятно, что автор хочет интересного вида группировку: исходные данные из таблицы сгруппировать по полю COLUMN1, при этом соответствующие значения из поля COLUMN2 собрать в одну строку (в одно поле с разделителем "запятая")...
...
Рейтинг: 0 / 0
написать SQL
    #34471445
mekhos, Mark BarinsteinНе понятен принцип, по которому вы формируете выборку.
Я не уловил логики...
Извиняюсь что не донёс смысл вопроса.
Да, Сергей прав, мне нужна
группировка по первому столбцу, а во втором столбце данные обединяются(сливаются) в строку.
вид разделителя большой роли не играет
...
Рейтинг: 0 / 0
написать SQL
    #34471500
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ипользовал для этих целей рекурсивный запрос что-то типа такого (пишу по памяти):
Код: 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.
  WITH VIRTUAL_TABLE(COLUMN1, COLUMN2, NUM, CURRLEVEL) 
  AS ( 
   SELECT 
     COLUMN1,
     ltrim(COLUMN2),
     ROW_NUMBER() OVER (PARTITION BY COLUMN1 ORDER BY COLUMN2), -- определяет порядок в сцепке
      2                                                           -- текущий порядковый номер добавляемого к сцепке
   FROM my_table
   UNION ALL 
   SELECT 
     VT1.COLUMN1, 
     CASE
       WHERE VT1.NUM = VT1.CURRLEVEL THEN RTRIM(VT2.COLUMN2) || ','||rtrim(VT1.COLUMN2) 
       ELSE VT1.COLUMN2
     END, 
     VT1.NUM, 
     VT1.CURRLEVEL +  1 
   FROM 
     VIRTUAL_TABLE as VT1,
     VIRTUAL_TABLE as VT2,
   WHERE VT1.COLUMN1 = VT2.COLUMN1
     AND VT1.NUM  >= VT1.CURRLEVEL
     AND VT2.NUM  = VT1.NUM -  1 
     ) 
  SELECT COLUMN1, MAX(COLUMN2) FROM VIRTUAL_TABLE GROUP BY COLUMN1 

Кажется я даже без CASE обходился - достаточно было условий WHERE, но не помню как.
...
Рейтинг: 0 / 0
написать SQL
    #34471509
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если порядок в сцепке будешь делать другой - измени последний SELECT - по каждому COLUMN1 выбирать записи с максимальным значением CURRLEVEL.
...
Рейтинг: 0 / 0
написать SQL
    #34471601
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
with t (COLUMN1, COLUMN2) as
(
values
  ('a', 'as')
, ('a', 'sd')
, ('a', 'df')
, ('b', 'fg')
, ('b', 'gh')
, ('d', 'hj')
),
i (column1, curr_column2, all_column2) as
(
select column1
, min(column2) curr_column2
, cast(min(column2) as varchar( 255 )) all_column2
from t
group by column1
  union all
select i.column1
, t.column2 curr_column2
, i.all_column2||','||t.column2 all_column2
from i, t
where i.column1=t.column1 
and t.column2=
(
select min(column2)
from t t2
where t2.column1=i.column1 and t2.column2>i.curr_column2
)
)
select i.column1, i.all_column2
from i
join
(
select column1, max(curr_column2) curr_column2
from i
group by column1
) ig on ig.column1=i.column1 and ig.curr_column2=i.curr_column2
order by  1 
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / написать SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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