2022. 2. 15. 14:27ㆍDatabase/MSSQL
[ STUFF ]
- 문자열의 위치와 길이를 지정하여 다른 문자로 치환하는 함수.
- 예시 : STUFF([문자열], [위치], [길이], [치환할 문자])
[ FOR XML PATH ]
- 쿼리의 실행결과 데이터를 XML 형식으로 표현
- 예시 : FOR XML PATH([row element명])
ex)
CASE WHEN COUNT(*) > 1 THEN STUFF(
(
CASE WHEN * <> 'S'
THEN (
SELECT (CASE WHEN *='S' THEN ',Q' ELSE ',' END) + *
FROM (
SELECT CONCAT(*,'~',*) AS *
, *
FROM (
SELECT MIN(*) AS *
, MAX(*) AS *
, MAX(*) AS *
FROM (
SELECT *
, *
, SUM(*) OVER (ORDER BY *) STEP1_GRP
FROM (
SELECT * AS *
, (
CASE LAG(CONVERT(NUMERIC, REPLACE(*, '-', ''))) OVER (ORDER BY CONVERT(NUMERIC, REPLACE(*, '-', '')))
WHEN (CONVERT(NUMERIC, REPLACE(*, '-', '')))-1 THEN 0
WHEN (CONVERT(NUMERIC, REPLACE(*, '-', ''))) THEN 0
ELSE 1
END
) AS *
, * AS *
FROM * (NOLOCK)
LEFT JOIN * (NOLOCK)
ON * = *
AND * = *
LEFT JOIN * (NOLOCK)
ON * = *
AND * = *
WHERE * <> 0
AND ISNULL(*, '') != ''
AND * = @V_*
AND * IN (SELECT VALUE FROM DBO.SPLIT(@P_*, ','))
) STEP1
) AS STEP2
GROUP BY STEP2.STEP1_GRP
) A
) V
WHERE * IN (SELECT VALUE FROM DBO.SPLIT(@P_*, ','))
FOR XML PATH('')
)
ELSE (
SELECT (CASE WHEN *='S' THEN ',Q' ELSE ',' END) + *
FROM ( SELECT DISTINCT * AS *, *
FROM * (NOLOCK)
INNER JOIN * (NOLOCK) ON * = *
AND * = *
INNER JOIN * (NOLOCK) ON * = *
AND * = *
WHERE * = *
) V
WHERE V.SDDOCO IN (SELECT VALUE FROM DBO.SPLIT(@P_*, ','))
FOR XML PATH('')
)
END
)
,1,1,'')
ELSE ''
END AS NOTE, -- 비고
'Database > MSSQL' 카테고리의 다른 글
DISTINCT vs GROUP BY (0) | 2022.02.15 |
---|---|
[ PIVOT ] 행을 열로 바꾸기 (0) | 2022.02.15 |
CURSOR (0) | 2022.02.15 |
MSSQL TIps (0) | 2022.02.15 |
PROCEDURE Tips (0) | 2022.02.15 |