Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Нужна помощь в составлении запроса.  [new]
MityaY
Guest
Есть таблица А. Из нее нужно получить значения(по какому-то критерию)
столбца b через запятую(значение1, значение2, ..., значениеN)
Скажите это можно сделать одним запросом?
Или только через PL/SQL?
18 май 05, 14:48    [1551855]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
Elic
Member

Откуда:
Сообщений: 29979
Результат SELECT-а в одну строку
18 май 05, 14:56    [1551914]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
MityaY
Guest
Пробовал
select *
  from
  ( select ltrim(sys_connect_by_path(value, ','), ',') as "IDs"
      from
      ( select value, lag(value) over (order by value) as prev_id
          from ValueAddedTax
      )
      start with prev_id is null
      connect by prev_id = prior value
      order by 1 desc
  )
  where rownum = 1
выдает ORA-01436: CONNECT BY loop in user data.
Это я как понимаю из-за того, что у меня в столбце value
есть повторяющиеся значения. Можно это сделать с повторяющимися значениями, чтобы они все и выводились?
18 май 05, 15:33    [1552124]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
Elic
Member

Откуда:
Сообщений: 29979
select *
  from
  ( select ltrim(sys_connect_by_path(value, ','), ',') as "Values"
      from
      ( select value,
            row_number() over (order by value)     as id,
            row_number() over (order by value) - 1 as prev_id
          from ValueAddedTax
      )
      start with prev_id = 0
      connect by prev_id = prior id
      order by level desc
  )
  where rownum = 1
Но лучше написать функцию
18 май 05, 16:51    [1552506]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
Vadya
Member

Откуда:
Сообщений: 125
Elic
select *
  from
  ( select ltrim(sys_connect_by_path(value, ','), ',') as "Values"
      from
      ( select value,
            row_number() over (order by value)     as id,
            row_number() over (order by value) - 1 as prev_id
          from ValueAddedTax
      )
      start with prev_id = 0
      connect by prev_id = prior id
      order by level desc
  )
  where rownum = 1
Но лучше написать функцию


Все,спасибо большое.
Как раз то,что надо
16 ноя 05, 19:02    [2076216]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10043
Or simpler and more efficient:

select ltrim(sys_connect_by_path(value, ','), ',') as "Values"
  from  (
         select  value,
                 row_number() over (order by value) as id,
                 count(*) over (order by value ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as cnt
           from  ValueAddedTax
        )
  where id = cnt
  start with id = 1
  connect by id = prior id + 1
/

SY.
16 ноя 05, 22:32    [2076599]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
OldOwl
Guest
xml рулит, пацаны:
select 
 replace(
   replace(
     replace(
        xmlElement("all",
             XMLAgg(xmlforest(object_name n)) ).getClobVal()
     , '</N><N>',',')
   ,'<all><N>','')
 ,'</N></all>','')
from all_objects where rownum < 10000;

Statement processed in 2,82 sec

А извраты с sys_connect_by_path обламываются уже на 150 записях...
21 ноя 05, 14:46    [2090384]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
Ales Protiv
Member

Откуда: Прага
Сообщений: 1872
OldOwl

xml рулит, пацаны:


можно короче:


select 
sys_xmlagg(xmlelement(col, OBJECT_NAME||',')).extract('/ROWSET/COL/text()').getclobval()  
from all_objects 
where rownum < 10000;
		   
24 мар 06, 16:24    [2487401]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Нужна помощь в составлении запроса.  [new]
Ё-МАЙО
Member

Откуда: Москва. Сокол.
Сообщений: 24
Ales Protiv
select 
sys_xmlagg(xmlelement(col, OBJECT_NAME||',')).extract('/ROWSET/COL/text()').getclobval()  
from all_objects 
where rownum < 10000;

Выдает сообщение об ошибке
ORA-31011: XML parsing failed
Причина, думаю, в том, что поля, которые необходимо склеить — CLOB

Подскажите, пожалуйста, можно обойти проблему как-нибудь?
8 дек 10, 16:09    [9906103]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
Humito
Guest
select a1, a2, a3, wm_concat(a4)over(partition by a1,a2)
from dbo.table
25 окт 11, 13:15    [11494892]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
Humito
Guest
Humito
select a1, a2, a3, wm_concat(a4)over(partition by a1,a2)
from dbo.table


wm_concat и есть функция конкатенации, точно работает в oraacle 10 и далее. Значения разделяются запятой. можно поменять реплэйсом:

select a1, a2, a3, replace((wm_concat(a4)over(partition by a1,a2)),',','ваш разделитель')
from dbo.table
25 окт 11, 13:19    [11494949]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
Humito,

может stragg ?
25 окт 11, 13:21    [11494974]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
wm12
Guest
Humito
wm_concat и есть функция конкатенации, точно работает в oraacle 10 и далее

Есть одно но, она не документирована
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=790977&msg=9466416
25 окт 11, 13:41    [11495197]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
от жеж гробокопатели))
Humito
ага вмконкат ага)) а потом ты накатишь патчик и получишь ошибку))
Ramin
с 11 лучше listagg() within group
25 окт 11, 13:59    [11495412]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в составлении запроса.  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
Vint
с 11 лучше listagg() within group

тоже вариант...
25 окт 11, 14:01    [11495438]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить