2016-11-28 5 views
1
내가 10

SQL의 CONCATENATE LISTAGG 10 그룹의 열() 중 하나

예 그룹의 열 중 하나를 연결할 수있는 쿼리를 작성하는 데 도움이 필요

: SQL 때문에

id1 | string1 
id1 | string2 
id1 | string3 
... 
id1 | string 1000 

을 내가 좋아하는 것 너무 큰 연결된 문자열을 허용하지 않습니다에 어쩌면 내가 얻을 수 있도록 한 번에 그룹 10 :

id1 | string1,string2,...,string10 
id1 | string11,string12,...,string20 

감사

+0

Oracle을 사용하고 있습니까? (해당 태그를 추가하십시오.) – jarlh

+0

사용중인 DBMS를 언급하십시오. –

답변

1
select  id,listagg (str,',') within group (order by str) 

from  (select  id,str,row_number() over (partition by id order by str) - 1 as rn 
      from  t 
      ) 

group by id,floor (rn/10) 
; 

또는 순서에 대해 걱정하지 않는 경우 -

select  id,listagg (str,',') within group (order by null) 

from  (select  id,str,rownum - 1 as rn 
      from  t 
      ) 

group by id,floor (rn/10) 
; 

샘플

create table t 
as 
select   'id' || to_char(ceil(level/100))  as id 
       ,'str' || lpad(to_char(level),4,'0') as str 
from   dual 
connect by  level <= 1000 
; 
+0

ceil (rn/10)을 수행하면 rownum/row_number(), fwiw에서 1을 뺄 필요가 없습니다. – Boneist

+0

@Boneist, 이것은 사실이지만 여러 데이터베이스로 작업하고 있으며 일부는 정수 연산을 사용하므로 비슷한 논리를 유지하려고합니다. –

+0

'floor '대신'ceil'을 사용하도록 전환하는 것과 관련이 있는지 모르겠습니다. – Boneist