이전 자료 구하기 0 4 520

by 기냥이 [SQLServer] [2022.07.05 14:21:06]


소스.png (9,143Bytes)

안녕하세요.

아래와 같은 경우 어떤식으로 구현하는게 좋을지 의견을 듣고 싶어 글을 남깁니다.

기초자료

- 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인값이 있으면 가공자료 같이 이전 값으로 대체하려고 합니다.

 

 

by 마농 [2022.07.05 14:34:48]

MSSQL 은 dual 이 없는데? 따로 만들어 사용하시는 건가요?
MSSQL 에서는 굳이 FROM dual 을 할 필요가 없습니다.
d1, d2 등의 컬럼은 문자 타입 맞나요? 혹시 숫자타입 인데 따옴표 잘못 붙인 건 아닌지?


by 기냥이 [2022.07.05 14:46:42]

d1, d2 는 숫자 타입이 맞습니다.


by 마농 [2022.07.05 14:51:39]
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
;

 


by 기냥이 [2022.07.05 14:56:07]

이렇게 신경 써주셔서 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입