안녕하세요.
아래와 같은 경우 어떤식으로 구현하는게 좋을지 의견을 듣고 싶어 글을 남깁니다.
기초자료
- DB: MS-SQL 2008 R2
- 기초 데이터
WITH T AS (
SELECT 'code1' AS code,'0' AS d1,'1' AS d2, '0' as d3, '0' as d4, '4' as d5 FROM DUAL UNION ALL
SELECT 'code2' AS code,'1' AS d1,'3' AS d2, '0' as d3, '2' as d4, '5' as d5 FROM DUAL union all
SELECT 'code3' AS code,'1' AS d1,'2' AS d2, '1' as d3, '2' as d4, '3' as d5 FROM DUAL
)
select
code,d1,d2,d3,d4,d5
from
t;
[결과]
- 소스 자료에 0인값이 있으면 가공자료 같이 이전 값으로 대체하려고 합니다.
WITH t AS ( SELECT 'code1' code, 0 d1, 1 d2, 0 d3, 0 d4, 4 d5 UNION ALL SELECT 'code2', 1, 3, 0, 2, 5 UNION ALL SELECT 'code3', 1, 2, 1, 2, 3 ) SELECT code , d1 , COALESCE(d2, d1) d2 , COALESCE(d3, d2, d1) d3 , COALESCE(d4, d3, d2, d1) d4 , COALESCE(d5, d4, d3, d2, d1) d5 FROM (SELECT code , d1 , NULLIF(d2, 0) d2 , NULLIF(d3, 0) d3 , NULLIF(d4, 0) d4 , NULLIF(d5, 0) d5 FROM t ) a ;