한 row의 column들의 값이 동일한지 비교하는 방법이 있을까요? 1 4 729

by 아리수 [Oracle 기초] [2021.06.01 11:39:48]


With Tab AS ( 

SELECT sysdate dt, 0 col1, 0 col2, 0 col3 from dual  union all
SELECT sysdate,    1  , 0,  0  from dual  union all
SELECT sysdate,    0  ,1,  0  from dual  union all
SELECT sysdate,    0  , 0,  0  from dual  union all

)

일 때 

col1, co2, col3 이 모두 0인 Row 만 가져오는 쿼리가 어떻게 될까요? 

단순히 

select  * from tab

where col1 =0 and col2=0 and col3=0 ; 

이렇게 말구요. ^^

지금은 Column을 세개만 있는데 컬럼 수가 많은 경우 할 수 있는 쿼리가 궁금합니다.^^. 

by 뉴비디비 [2021.06.01 23:25:57]
WITH Tab (pkey, dt, col1, col2, col3, col4, col5) AS ( 
    SELECT 1, sysdate, 0 , 0,  0,  0,  0  FROM dual UNION ALL
    SELECT 2, sysdate, 1 , 0,  0,  1,  0  FROM dual UNION ALL
    SELECT 3, sysdate, 0 , 1,  0,  0,  0  FROM dual UNION ALL
    SELECT 4, sysdate, 0 , 0,  0,  0,  0  FROM dual
)
SELECT
    tab.* 
FROM tab 
JOIN (
    SELECT pkey
    FROM tab UNPIVOT ( tvalue FOR tname IN ( col1, col2, col3, col4, col5 ) )
    WHERE tvalue = 0 -- 동일해야 하는 값
      AND tname in ( UPPER('col1'), UPPER('col2'), UPPER('col3'), UPPER('col4'), UPPER('col5') ) -- 동일해야 하는 칼럼들
    GROUP BY pkey 
    HAVING COUNT(pkey) = 5  -- 동일해야 하는 칼럼수
) BB ON tab.pkey = BB.pkey

 


by 아리수 [2021.06.02 09:19:56]

현재 오라클 9i 인데 (미리 말씀을 안드렸네요. )

ORA-32033: 지원되지 않는 열 별칭 지정 Error 가 나옵니다. 

11g 에서는 정상적으로 작동합니다. ^^. 

With 구문을 바꿔야 겠네요. 

그리고 UNPIVOT은 11g부터 사용이 가능하군요. ^^. 

감사합니다. 


by 마농 [2021.06.02 07:56:51]
-- tab 은 이미 사용되고 있는 명칭입니다. 다른 이름을 사용하세요.
WITH tab_1 AS
( 
SELECT sysdate dt, 0 col1, 0 col2, 0 col3 FROM dual
UNION ALL SELECT sysdate, 1, 0, 0 FROM dual
UNION ALL SELECT sysdate, 0, 1, 0 FROM dual
UNION ALL SELECT sysdate, 0, 0, 0 FROM dual
)
SELECT *
  FROM tab_1
 WHERE 0 = ALL(col1, col2, col3)
;

 


by 아리수 [2021.06.02 09:20:43]

WHERE 조건에 o는 0인거죠? ^^

 

답변 감사합니다 

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