SELECT DECODE(NVL(COLUMN1,'0'),'0','N','Y') FROM TALBE1 WHERE COLUMN1 = 'NAME1'
위에 쿼리를 보시면은 NAME1은 TABLE1에 존재하는 데이터입니다.
그래서 리턴 값은 Y이구요, TABLE1에 없는 데이터 NAME2를 조회 햇을때 왜 N가 안 나오는거에요 ?
고수 님들 도와주세요~
by 아발란체
[2013.03.05 12:29:51]
말이.... 좀 어페가 있어 보이는데용, 그 말은 "TABLE1에 없는 데이타 NAME2를 조회 했을때... " 부분은데 쓰신 말 그대로 NAME2 데이타는 TABLE1에 없는 데이타 입니다. 없는 데이타는 레코드 자체가 출력이 안됩니다. 그렇게 때문에 조건절이 어떻게 되든 출력이 안되고 DECODE문도 타지 않습니다.
by 유경호
[2013.03.05 12:36:19]
~네 그럼 원하는 결과 N을 출력 할려면은 어떻게 해야 되나요 ?
by 아발란체
[2013.03.05 15:21:02]
해당 테이블에 데이타가 존재한다면 올려주신 질의어에서 조건문만 삭제를 했을 때 SELECT DECODE(NVL(COLUMN1,'0'),'0','N','Y') FROM TALBE1
그럼 값이 NAME1이든 NAME2이던 값이 있으면 Y를 출력하고요, 값이 없으면 N를 출력합니다.
확인 사항이 SELECT COUNT(*) FROM TABLE1 WHERE COLUMN1 IS NULL 이와 같이 질의어를 수행하여 데이타 0건 조회 된다면 무조건 Y 밖에 출력될 수 없습니다. 1건 이상이면 여기에 잡힌 데이타들이 N으로 조회 될 수 있습니다.
by 부쉬맨
[2013.03.05 12:46:49]
아발란체님의 말씀을빌리자면
A B C ' ' <== 이렇게된 데이터와(데이터는존재하지만해당 컬럼에만없는데이터) '' '' '' '' <== 이렇게된 데이터는 (없는로우)
일단 로우의 개념으로 보시면될꺼같네요.
COLUMN1 의 로우데이터가 존재하는지.. 한줄에 여러개 컬럼이 표현된다면 해당컬럼에 데이터가없어도 나올꺼고 하지만 한줄이 표현이 되지않는다면 해당컬럼에 데이터는 없으면 나오지않을것이고.
어렵나-_-;;
by 유경호
[2013.03.05 12:51:55]
이해 했습니다... ㅋㅋ 답볍 감사합니다.
by 신이만든짝퉁
[2013.03.05 13:14:07]
이렇게 한번 해보세요.
with t as ( select 'name1' column1 from dual union all select 'name3' column1 from dual ) select decode(result, 0, 'N', 'Y') YN from ( select count(*) result from t where column1 = 'name2' ) ;
by 마농
[2013.03.05 13:17:03]
-- 1. Group 함수 사용
SELECT NVL(MIN('Y'), 'N') yn
FROM talbe1
WHERE column1 = :v_column1
;
-- 2. 스칼라서브쿼리
SELECT NVL((SELECT 'Y' FROM talbe1 WHERE column1 = :v_column1), 'N') yn
FROM dual
;
-- 3. 아우터 조인
SELECT NVL2(column1, 'Y', 'N') yn
FROM talbe1
RIGHT OUTER JOIN dual
ON column1 = :v_column1
;
by 신이만든짝퉁
[2013.03.05 13:28:47]
코드의 길이가 다르네요. 마농님께 또 배우고 갑니다. ^^
by 아린
[2013.03.06 10:43:49]
WITH t(a, b) AS(
SELECT 'NAME1', 100 FROM dual UNION ALL
SELECT 'NAME3', 100 FROM dual
)
SELECT *
FROM (SELECT 'Y' FROM t WHERE a = 'NAME1'
UNION ALL
SELECT 'N' FROM dual
)
WHERE ROWNUM = 1
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.