델맨 님이 쓰신 글 :
: 새로운 월이 될때마다 시리얼번호를 초기화 해서 사용하려고 아래와 같은 코드를 만들었습니다.
: 레코드에 기존의 데이타가 들어 있을때는 정상적으로 동작하는데 ,
: null반환하지 마라고 COALESCE 을 사용하여 null일때 리턴할 데이타를 지정해줬는데도
: 한개의 자료도 없을때 (그러니까 최초의 데이타생성시)는 null만 반환합니다.
:
: 주력DB를 MS만 쓰다가 이제부터 FIREBIRD로 바꾸려고 하는데 힘드네요....
: 조언부탁드립니다.
:
: SELECT
: COALESCE ( KK.CUSTCODESERIAL + 1 , 1 ) AS LASTCODE
: FROM
: (
: SELECT
: FIRST 1 CUSTCODESERIAL
: FROM
: GFCUST
: WHERE
: CUSTCODEY = '2007'
: AND
: CUSTCODEM = '11'
: ORDER BY
: CUSTCODEY DESC , CUSTCODEM DESC
: ) AS KK
:
: 그리고
: SELECT
: CASE KK.CUSTCODESERIAL
: WHEN NULL THEN 1
: ELSE KK.CUSTCODESERIAL + 1
: END AS LASTCODE
: FROM
: (
: SELECT
: FIRST 1 CUSTCODESERIAL
: FROM
: GFCUST
: WHERE
: CUSTCODEY = '2007'
: AND
: CUSTCODEM = '11'
: ORDER BY
: CUSTCODEY DESC , CUSTCODEM DESC
: ) AS KK
: 이렇게 해도 마찬가지입니다.
안녕하세요. 까막입니다.
저도 그렇고, 다른 분들도 그런 실수를 많이 하실 것 같은데요.
COALESCE 함수를 써서 NULL 값을 제거 하려면 결과 RECORD 가 하나 이상은 있어야 합니다.
결과값 자체가 아예 없을 경우는 함수도 동작을 하지 않읍니다.
따로 변수를 하나 등록을 하셔서, 그 값이 NULL 일 경우 COALESCE 함수 처리를 하시는게 좋을 겁니다.
DECLARE VARIABLE vResultValue DECIMAL(01,0);
SELECT ResultValue
FROM TableName
INTO :vResultValue;
vResultValue = COALESCE(:vResultValue,1);
이런 식으로 처리 하셔야 원하시는 결과를 얻을 수 있을 겁니다.
위대한 단군혼이 살아있는 나라.... 대한민국.
|