Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Результат SELECT-а в одну строку  [new]
rgarif
Member

Откуда: Казань
Сообщений: 108
Знает ли кто нить, какой нить фокус чтобы:
SELECT ID FROM MY_TAB
все ID вывел одной строкой
11 мар 05, 11:49    [1377630]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
_eater
Guest
Элементарно Ватсон
Пишешь sql функцию которая конкатенирует результат курсора в одну строку и возвращает его в сиквел стейтмент

И никаких фокусов
11 мар 05, 11:52    [1377644]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Vadim_Maximov
Member

Откуда: Москва
Сообщений: 3574
Также еще можно поискать по stragg (начиная с девятки)
Тынц
11 мар 05, 11:53    [1377649]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
rgarif
Member

Откуда: Казань
Сообщений: 108
хе :)
а без функции?
11 мар 05, 11:54    [1377662]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Vadim_Maximov
Member

Откуда: Москва
Сообщений: 3574
rgarif
хе :)
а без функции?

Совсем без функции - никак.
А с групповой - см. мой предыдущий пост.
11 мар 05, 11:55    [1377666]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28995
rgarif
а без функции?
Но через ж...
select *
  from
  ( select ltrim(sys_connect_by_path(id, ','), ',') as "IDs"
      from
      ( select id, lag(id) over (order by id) as prev_id
          from MY_TAB
      )
      start with prev_id is null
      connect by prev_id = prior id
      order by 1 desc
  )
  where rownum = 1
11 мар 05, 12:19    [1377830]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Аноним
Guest
Elic
select *
  from
  ( select ltrim(sys_connect_by_path(id, ','), ',') as "IDs"
      from
      ( select id, lag(id) over (order by id) as prev_id
          from MY_TAB
      )
      start with prev_id is null
      connect by prev_id = prior id
      order by 1 desc
  )
  where rownum = 1


а как прспособить к более сложному случаю:
name  value
------ ------
name1 value1
name1 value2
name2 value1

должно получиться:
name  val
----- -------------
name1 value1,value2
name2 value1
11 мар 05, 13:01    [1378095]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28995
Аноним
а как прспособить к более сложному случаю:
name  val
----- -------------
name1 value1,value2
name2 value1
Для головы на плечах - несложное занятие :)
select acquirer_operation_list_id, max("IDs") as "IDs"
  from
  ( select acquirer_operation_list_id, ltrim(sys_connect_by_path(id, ','), ',') as "IDs"
      from
      ( select acquirer_operation_list_id, id, 
            lag(id) over (partition by acquirer_operation_list_id order by id) as prev_id
          from op_operation
      )
      start with prev_id is null
      connect by prev_id = prior id and acquirer_operation_list_id = prior acquirer_operation_list_id
  )
  group by acquirer_operation_list_id
Столбцы сам поменяй :)
На строках при NLS_SORT<>BINARY не исключаю нехороших нюансов.
11 мар 05, 13:45    [1378392]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Результат SELECT-а в одну строку  [new]
Ales Protiv
Member

Откуда: Прага
Сообщений: 1872
для коллекции:
select 
sys_xmlagg(xmlelement(col, OBJECT_NAME||',')).extract('/ROWSET/COL/text()').getclobval()  
from all_objects 
where rownum < 10000;
24 мар 06, 16:35    [2487466]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Ales Protiv
Member

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

а как прспособить к более сложному случаю:
name  value
------ ------
name1 value1
name1 value2
name2 value1

должно получиться:
name  val
----- -------------
name1 value1,value2
name2 value1


select 
sys_xmlagg(xmlelement(col, VALUE||',')).extract('/ROWSET/COL/text()').getclobval()  
from TABLE_NAME
group by NAME;
24 мар 06, 16:40    [2487500]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Alexander Us
Member

Откуда:
Сообщений: 1028
К сожалению, приведённый выше пример с sys_xmlagg пересортирует строки.

Есть ли возможность склеить строки предварительно отсортировав их по полю T$LFD2 в приведённом ниже примере:?
SELECT  
sys_xmlagg(xmlelement(col, trim(T$TEXT) || chr(13))).extract('/ROWSET/COL/text()').getclobval()  "TEXT"
 from  tucarc041100
 where
 and  T$INVN=:KEY2
group by T$INVN,T$KENN,T$LFD1

РS: подзапрс с сортировкой не помогает
РРS: оракул 9.1
18 май 06, 17:31    [2680515]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Reves
Member

Откуда:
Сообщений: 2
Млин неужель никто не добил за год?
Пришлось самому ковыряться 1,5 часа, т.к. я с XML никогда дело не имел

Select 
rtrim(to_char(
         sys_xmlagg(
                      xmlelement( "QWER", xmlagg( xmlelement("COL", name_par || ',')
                                                            Order by name_par
                                                            )
                                     )
                    ).extract('ROWSET/QWER/COL/text()').getclobval()
              ),',') TEXT
From ANY_TABLE 
Group by name_par

Oracle 9i
28 фев 07, 16:48    [3844243]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Reves
Млин неужель никто не добил за год?
Вы серьезно? :)

Reves
Пришлось самому ковыряться 1,5 часа, т.к. я с XML никогда дело не имел
Ну тоже в общем неполохо :) Познакомиться с новым синтаксисом никогда не вредно :) Можно ещё попробовать найти автора и подарить ему результат :)
28 фев 07, 16:54    [3844309]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Reves
Member

Откуда:
Сообщений: 2
Jannny
Вы серьезно? :)

Эт, я чет поторопился - Order by не работает в данном контексте, но сортируется всё правильно. Надо ишо год подумать :)

Jannny
Можно ещё попробовать найти автора и подарить ему результат :)

Я думаю он уже решил свою проблему.
28 фев 07, 17:08    [3844420]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Результат SELECT-а в одну строку  [new]
bde_dn
Member

Откуда:
Сообщений: 1
rgarif,

нужно иметь одну функцию для таких случаев

create or replace function c2s(c sys_refcursor,dlm varchar2:=',') return varchar2 is
res varchar2(4000);
rs varchar2(2000);
begin
-- open c;
loop
fetch c into rs;
exit when c%notfound;
res:=res||dlm||rs;
end loop;
close c;
return substr(res,length(dlm)+1);
end c2s;

select c2s(cursor(select to_char(id) from my_table /*oder,group,...*/)) from dual;

В SQL больше 4000 не дает, если надо больше в функции res clob.
14 ноя 08, 18:08    [6443198]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Добрый Э - Эх
Guest
bde_dn
rgarif,

нужно иметь одну функцию для таких случаев
Привет, гробокопатель!!!
Ты и в правду думаешь, что rgarif три года сидит и ждет от тебя ответа???
15 ноя 08, 07:28    [6444645]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Katya_83
Member

Откуда:
Сообщений: 62
зато я получила ответ:)
9 дек 08, 12:44    [6544328]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Добрый Э - Эх
Guest
Katya_83
зато я получила ответ:)
Для этого вполне достаточным было прочитать местный ТОП популярных вопросов ;)
9 дек 08, 13:41    [6544793]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
nxx
Member

Откуда:
Сообщений: 2024
Ales Protiv
Аноним

а как прспособить к более сложному случаю:
name  value
------ ------
name1 value1
name1 value2
name2 value1

должно получиться:
name  val
----- -------------
name1 value1,value2
name2 value1


select 
sys_xmlagg(xmlelement(col, VALUE||',')).extract('/ROWSET/COL/text()').getclobval()  
from TABLE_NAME
group by NAME;


подскажите, как для данного примера сделать сотрировку по VALUE
внутри CLOB
27 май 09, 15:10    [7235152]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28995
nxx
как для данного примера сделать сотрировку по VALUE
Разуй глаза :)
27 май 09, 15:17    [7235203]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
nxx
Member

Откуда:
Сообщений: 2024
Elic
nxx
как для данного примера сделать сотрировку по VALUE
Разуй глаза :)



автор
SQL> select o.owner
2 ,sys_xmlagg(xmlelement( "QWER", xmlagg( xmlelement("COL", o.object_name || ',') Order by o.obj
ect_name
3 )
4 )
5 ).extract('ROWSET/QWER/COL/text()').getclobval()
6 from all_objects o
7 where rownum < 10000
8 group by o.owner
9 /
select o.owner
*
ERROR at line 1:
ORA-00937: not a single-group group function



что-то не работает
27 май 09, 15:50    [7235458]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Andrei Fomichev
Member

Откуда: Москва
Сообщений: 452
nxx

что-то не работает

select owner
  ,sys_xmlagg(xmlelement( "QWER", x) ).extract('ROWSET/QWER/COL/text()').getclobval() s
from 
  (select o.owner, xmlagg( xmlelement("COL", o.object_name || ',') order by o.object_name) x
   from all_objects o where rownum < 10000 group by o.owner ) a
group by owner
28 май 09, 11:03    [7238165]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Результат SELECT-а в одну строку  [new]
evs-ru
Member

Откуда:
Сообщений: 4
Есть есть три таблицы, TABLE1, TABLE2, TABLE3.
USERS
ID NUMBER(20)
NAME VARCHAR2(64)

RIGHTS
ID NUMBER(20)
USER_ID NUMBER(20)
GROUP_ID NUMBER(20)

GROUPS
ID (NUMBER(20)
NAME VARCHAR(20)

Как сделать такой запрос
SELECT U.NAME USERNAME, G.NAME GROUPNAME
FROM USERS U, RIGHTS R, GROUPS G
WHERE R.USER_ID=U.ID AND R.GROUP_ID=G.ID

чтобы значения поля GROUPNAME там, где USERNAME совпадает писались не в несколько строк, а через запятую?
чтобы названия групп выводились в одну строку через запятую?
19 сен 10, 20:47    [9463739]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9485
SELECT U.NAME USERNAME, RTRIM((XMLAGG(XMLELEMENT(e,G.NAME,',').EXTRACT('//text()')),',') GROUPNAME
FROM USERS U, RIGHTS R, GROUPS G
WHERE R.USER_ID=U.ID AND R.GROUP_ID=G.ID
GROUP BY U.NAME
/

For example:

SQL> select  job,
  2          rtrim(xmlagg(xmlelement(e,ename,',').extract('//text()')),',') ename_list
  3    from  emp
  4    group by job
  5  /

JOB       ENAME_LIST
--------- ----------------------------------------
ANALYST   SCOTT,FORD
CLERK     SMITH,JAMES,ADAMS,MILLER
MANAGER   JONES,CLARK,BLAKE
PRESIDENT KING
SALESMAN  ALLEN,WARD,TURNER,MARTIN

SQL> 

SY.
19 сен 10, 21:26    [9463823]     Ответить | Цитировать Сообщить модератору
 Re: Результат SELECT-а в одну строку  [new]
Zloxa
Member

Откуда: СССР ☭
Сообщений: 1031
SY,
Для верности еще результат завернуть бы в dbms_xmlgen.convert(<expr>,1), чтобы не получать всякие lt,gt,amp
20 сен 10, 10:57    [9465250]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить