in 사용문의 0 9 933

by fly [SQL Query] [2014.11.26 11:56:13]


in ('a', 'b', 'c', ...)

위와 같이 in 구문을 사용하면 a, b, c중 하나라도 만족할때 결과가 나오는데

제가 원하는 결과는 a, b, c 모두 존재하는 데이터에 대해서만 결과가 출력되게 하고싶습니다.

파라미터로 넘기는 a, b, c 의 개수가 고정이 아닌데 가능할까요?

 

by 마농 [2014.11.26 13:12:41]

단순 조건식의 문제가 아닙니다.
 - 하나의 값이 여러값과 동시에 같을 수는 없으니까요.
집합의 문제입니다.
 - 조건만 걸고 원본 그대로 뽑는 문제와는 다르죠
 - 집합적으로 생각해야 하는 문제이며 결과집합의 형태가 원본과는 다를 수 있습니다.
 - 결과집합의 형태에 따라 쿼리도 달라지겠지요
 - 원본자료 및 그에 따른 결과자료 예시를 들어주세요.


by fly [2014.11.26 15:25:06]

  

비주류님의 댓글을 빌려 예시를 올립니다.
WITH t AS (
    SELECT 1 id, 'a' val FROM DUAL UNION ALL
    SELECT 1 id, 'b' val FROM DUAL UNION ALL
    SELECT 1 id, 'c' val FROM DUAL UNION ALL
    SELECT 2 id, 'a' val FROM DUAL UNION ALL
    SELECT 2 id, 'b' val FROM DUAL
)
 위와같은 테이블에서
조건절이 val in ('a','b','c') 이면 결과는 1이고
조건절이 val in ('a','b') 이면 결과는 1과 2입니다.

by 마농 [2014.11.26 15:48:30]

비주류님이 이미 답을 제시하셨는데요???


by 비주류 [2014.11.26 13:13:52]
-- 값 중복이 있으면 바꿔야 겠지만 우선 올려봅니다.
WITH t AS (
    SELECT 1 id, 'a' val FROM DUAL UNION ALL
    SELECT 1 id, 'b' val FROM DUAL UNION ALL
    SELECT 1 id, 'c' val FROM DUAL UNION ALL
    SELECT 2 id, 'a' val FROM DUAL UNION ALL
    SELECT 2 id, 'b' val FROM DUAL
)
SELECT  id
FROM    t
GROUP BY id
HAVING SUM(CASE WHEN val IN ('a','b','c') THEN 1 ELSE 0 END) = 3

--SELECT  *
--FROM    (
--            SELECT  t.*,
--                    SUM(CASE WHEN val IN ('a','b','c') THEN 1 ELSE 0 END)
--                        OVER (PARTITION BY id) cnt
--            FROM    t
--        )
--WHERE   cnt = 3

 


by DarkBee [2014.11.26 15:37:43]
SELECT id
  FROM t
 GROUP BY id
HAVING COUNT(*) = #PARAM_COUNT#
   AND COUNT ( CASE WHEN val IN ('a','b') THEN 1 END) = #PARAM_COUNT#

 


by fly [2014.11.26 15:54:01]

답변주신 분들께 감사드립니다^^


by 비주류 [2014.11.26 15:58:26]
-- val 값 중복될 때...
SELECT  *
FROM    (
            SELECT  t.*,
                    COUNT(DISTINCT CASE WHEN val IN ('a','b','c') THEN val END)
                        OVER (PARTITION BY id) cnt
            FROM    t
        )
WHERE   cnt = 3

 


by fly [2014.11.26 16:31:11]

감사합니다^^

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