안녕하세요
정말 심히 고민하고 고민하지만 답이 안나와서 질문올립니다.
매장에 방문한 고객수를 구하는 쿼리입니다.
문제는 고객수와 성별때문입니다.
예로 고객수가 2명이고 남,여 인 데이터를 뽑아보는데요
WITH T AS
( SELECT '0004' AS BILL, 26000 AS SALE, 2 AS CUST_CNT, 'M' AS SEX, 1 AS SEX_CNT FROM DUAL UNION ALL
SELECT '0004' AS BILL, 26000 AS SALE, 2 AS CUST_CNT, 'F' AS SEX, 1 AS SEX_CNT FROM DUAL UNION ALL
SELECT '0005' AS BILL, 52000 AS SALE, 2 AS CUST_CNT, 'M' AS SEX, 2 AS SEX_CNT FROM DUAL
)
SELECT * FROM T
결과값
---------------------------
0004 26000 2 M 1
0004 26000 2 F 1
0005 52000 2 M 2
---------------------------
0004번 빌지에 남자1 여자1 입니다.
WHERE 절을 어떻게 줘야
결과값
---------------------------
0004 26000 2
-----------------------------
이라는 결과를 가질수 있을까
조건에 남자1 여자1 이라는 조건이 꼭들어가야합니다
조회시 남2,여1
남2, 여2등등 여러조건으로 데이터를 뽑아야하기 때문입니다.
고수님들의 도움을 기다립니다... 감사합니다.
원하시는게 맞는지 애매하지만... 아래와 같이 하면 될까요?
WITH T AS ( SELECT '0004' AS BILL, 26000 AS SALE, 2 AS CUST_CNT, 'M' AS SEX, 1 AS SEX_CNT FROM DUAL UNION ALL SELECT '0004' AS BILL, 26000 AS SALE, 2 AS CUST_CNT, 'F' AS SEX, 1 AS SEX_CNT FROM DUAL UNION ALL SELECT '0005' AS BILL, 52000 AS SALE, 2 AS CUST_CNT, 'M' AS SEX, 2 AS SEX_CNT FROM DUAL ) SELECT BILL, SALE, CUST_CNT FROM T WHERE (SEX = 'M' AND SEX_CNT = 1) OR (SEX = 'F' AND SEX_CNT = 1) GROUP BY BILL, SALE, CUST_CNT HAVING MAX(DECODE(SEX, 'M', SEX_CNT, 0)) = 1 AND MAX(DECODE(SEX, 'F', SEX_CNT, 0)) = 1