조회 쿼리 질문드립니다. 0 3 1,653

by 클라나드 [2014.05.16 10:41:50]


안녕하세요 

정말 심히 고민하고 고민하지만 답이 안나와서 질문올립니다.

매장에 방문한 고객수를 구하는 쿼리입니다.

문제는 고객수와 성별때문입니다.

예로 고객수가 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등등 여러조건으로 데이터를 뽑아야하기 때문입니다.

고수님들의 도움을 기다립니다... 감사합니다.

by 비주류 [2014.05.16 10:56:17]

원하시는게 맞는지 애매하지만... 아래와 같이 하면 될까요?

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

 


by 클라나드 [2014.05.16 13:40:12]

답변감사드립니다.

짜주신쿼리를 제 데이터에 사용에서 사용하고있습니다.

 

잘되는건지는 잘모르겠네요 너무 어렵습니다. ㅠㅠ


by DarkBee [2014.05.16 12:52:35]
SELECT BILL
     , MAX ( SALE     )
     , MAX ( CUST_CNT )
FROM T
GROUP BY BILL
HAVING COUNT ( DISTINCT sex  ) > 1

 

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