회원 등록번호
A. 1
B. 2
A. 2
이렇게 있을때 만들고 싶은것은
등록번호가 1, 2 둘다 가지고 있는 A 회원을 찾고 이를
Case when 으로 컬럼을 만들고 싶습니다.
결과물 ex
회원 등록번호 구분
A. 1. 1&2
A. 2. 1&2
쉬운거 같은데 잘모르겠습니다....
1. 등록번호는 (1,2) 두개 뿐인가요?
- 만약 다른 번호도 있다면? (1,2,3) 3개를 가진 회원은 출력 대상이 되는지? 제외 대상이 되는지?
- 출력 대상이 된다면? 출력은 1&2 가 되어야 하는지? 1&2&3 이 되어야 하는지?
2. DB 종류 및 버전은 어떻게 되나요?
- DB 종류 및 버전에 따라 구현 방법이 다를 수 있습니다.
대댓글 다는법을 몰라서 댓글로 적는 점 죄송합니다.
1. 등록번호는 총 3개 입니다.
그래서 결국 만들때는
-- 1. 2. 3. 1&2. 1&3. 2&3. 1&2&3 이렇게 만들 예정이었습니다.
만약 1&2&3을 만족하는 회원은 1&2에도 1&3에도 2&3에도 중복으로는 출력되고 싶습니다.
2. DB는 Hive 사용중인데 버전은 잘 모르겠습니다.
제가 사용해 보지 않응 DB 라 잘 모르겠네요.
CASE 구문은 되는 것 같으니. 기본적인 문법만(GROUP BY, CASE) 사용해서 풀어보겠습니다.
아래는 MariaDB 에서 테스트한 내용입니다.
-- MariaDB --
WITH t AS
(
SELECT 'A' cd, 1 no
UNION ALL SELECT 'A', 2
UNION ALL SELECT 'B', 2
UNION ALL SELECT 'C', 1
UNION ALL SELECT 'D', 3
UNION ALL SELECT 'E', 1
UNION ALL SELECT 'E', 3
UNION ALL SELECT 'F', 2
UNION ALL SELECT 'F', 3
UNION ALL SELECT 'G', 1
UNION ALL SELECT 'G', 2
UNION ALL SELECT 'G', 3
)
SELECT *
FROM (SELECT cd
, SUBSTR(CONCAT( MAX(CASE no WHEN 1 THEN '&1' ELSE '' END)
, MAX(CASE no WHEN 2 THEN '&2' ELSE '' END)
, MAX(CASE no WHEN 3 THEN '&3' ELSE '' END)
), 2, 9) gb
FROM t
GROUP BY cd
) a
WHERE gb = '1&2'
;
이렇게 하면 출력값은
| Cd | gb |
| A | 1&2 |
이렇게 나오지 않을까요?
서브쿼리에 No를 넣으면 results 0이 나왔습니다.
------원하는 출력값--------
| Cd | No | Gb |
| A | 1 | 1&2 |
| A | 2 | 1&2 |
A 회원이 1,2,3 등록번호를 다 가지고 있으면 어떻게 출력되어야 하나요?
구분
1 , 2, 3, 1&2, 1&3, 2&3, 1&2&3에 모두 한번씩 들어가야 합니다.
이 부분이 제가 제일 먼저 질문 드린 부분이었는데 답변이 모호해서...
1,2,3 모두 가진 회원은 어떤 조건이 들어오든 다 나와야 한다는 건가요?