[SQL] DB2의 쿼리에서 구분 된 문자열을 만들기
SQLDB2의 쿼리에서 구분 된 문자열을 만들기
저는는 iSeries (AS / 400)의 DB2에서 쿼리의 결과에서 구분 된 문자열을 만들려고하고 있습니다. 나는 T-SQL에서 이런 짓을했지만, 여기에 그것을 할 수있는 방법을 찾을 수 없습니다.
여기에 T-SQL 내 코드입니다. 나는 DB2에 equivelant을 찾고 있어요.
DECLARE @a VARCHAR(1000)
SELECT @a = COALESCE(@a + ', ' + [Description], [Description])
FROM AP.Checkbooks
SELECT @a
이처럼 내 테이블보기에서 설명하는 경우 :
그런 다음이를 반환합니다 :
해결법
-
==============================
1.기본적으로 당신은 DB2에서의 MySQL의 GROUP_CONCAT 집계 함수에 해당 찾고 있습니다. 내가 찾은 하나 개의 스레드에 따르면, 당신은 XMLAGG 기능을 통해 이동하여이 동작을 모방 할 수 있습니다 :
기본적으로 당신은 DB2에서의 MySQL의 GROUP_CONCAT 집계 함수에 해당 찾고 있습니다. 내가 찾은 하나 개의 스레드에 따르면, 당신은 XMLAGG 기능을 통해 이동하여이 동작을 모방 할 수 있습니다 :
create table t1 (num int, color varchar(10)); insert into t1 values (1,'red'), (1,'black'), (2,'red'), (2,'yellow'), (2,'green'); select num, substr( xmlserialize( xmlagg( xmltext( concat( ', ', color ) ) ) as varchar( 1024 ) ), 3 ) from t1 group by num;
이것은 반환
1 red,black 2 red,yellow,green
(또는해야, 내가 제대로 일을 읽고 있어요 경우)
-
==============================
2.당신은 공통 테이블 식 (CTE를) 및 재귀를 사용하여이 작업을 수행 할 수 있습니다.
당신은 공통 테이블 식 (CTE를) 및 재귀를 사용하여이 작업을 수행 할 수 있습니다.
with cte1 as (select description, row_number() over() as row_nbr from checkbooks), cte2 (list, cnt, cnt_max) AS (SELECT VARCHAR('', 32000), 0, count(description) FROM cte1 UNION ALL SELECT -- No comma before the first description case when cte2.list = '' THEN RTRIM(CHAR(cte1.description)) else cte2.list || ', ' || RTRIM(CHAR(cte1.description)) end, cte2.cnt + 1, cte2.cnt_max FROM cte1,cte2 WHERE cte1.row_nbr = cte2.cnt + 1 AND cte2.cnt < cte2.cnt_max ), cte3 as (select list from cte2 where cte2.cnt = cte2.cnt_max fetch first 1 row only) select list from cte3;
-
==============================
3.난 당신이 선언 변수와 같은 OLEDB에 대한 SQL 아무것도 공상을하거나 테이블을 만들 수 없기 때문에이 작업을 수행 할 수 없습니다 이해 내가는 OLEDB과에서이 작업을 수행하기 위해 노력하고있어. 내가 추측 그래서 방법이 없습니다.
난 당신이 선언 변수와 같은 OLEDB에 대한 SQL 아무것도 공상을하거나 테이블을 만들 수 없기 때문에이 작업을 수행 할 수 없습니다 이해 내가는 OLEDB과에서이 작업을 수행하기 위해 노력하고있어. 내가 추측 그래서 방법이 없습니다.
-
==============================
4.당신은 DB2 9.7 이상을 실행하는 경우 LISTAGG 기능을 사용할 수 있습니다. 여기 보라 : http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.sql.ref.doc%2Fdoc%2Fr0058709.html
당신은 DB2 9.7 이상을 실행하는 경우 LISTAGG 기능을 사용할 수 있습니다. 여기 보라 : http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.sql.ref.doc%2Fdoc%2Fr0058709.html
from https://stackoverflow.com/questions/3728010/create-a-delimitted-string-from-a-query-in-db2 by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 이유는 "프로 시저 매개 변수 '@statement'유형의 'NTEXT / NCHAR / NVARCHAR'를 기대하고있다."받을 수 있나요 나는 sp_executesql을 사용하려고 할 때? (0) | 2020.06.09 |
---|---|
[SQL] 는 SQL 쿼리에 사용되는 테이블 목록 (0) | 2020.06.09 |
[SQL] 모두 일치하는 정규 표현식은 T-SQL 스크립트에 댓글 (0) | 2020.06.09 |
[SQL] MYSQL - IN과 존재의 차이 (0) | 2020.06.09 |
[SQL] DATE에 시간대와 오라클 변환 TIMESTAMP (0) | 2020.06.09 |