sql 을 공부 하고 있는데, 막히는 부분이 있어서
여기저기 찾아 보다가
이렇게 좋은 사이트 있는거 보고 질문 드립니다~~
table 1 table2
(name, number, age) (name, number, sex)
============== ==============
(gim, 111, 10) (choi, 222, M)
(jung, 333, 20) (min, 444, W)
(you, 555, 30) (bae, 666, W)
(jung, 333, M)
이런 테이블 2개가 있다고 하였을 때,
SELECT Name, number, age, NULL as sex
FROM table1
UNION
SELECT Name, number, NULL as age, sex
FROM table2;
이것을 수행하면,
(Name, number, age, sex)
======================================
<kim, 111, 10, NULL>
<jung, 333, 20, NULL>
<you, 555, 30, NULL>
<choi, 222, NULL, M>
<min, 444, NULL, W>
<bae, 666, NULL, W>
<jung, 333, NULL, M>
이렇게 결과가 나온다고 알고 있습니다.
그런데 여기서
<jung, 333, 20, NULL>
<jung, 333, NULL, M>
사실 이 row가 하나로 합쳐지는 것이 좋겠다고 생각 했는데,
어떤 명령어를 추가하면 이렇게 중복돼는 row를 합치면서 union을 수행 할 수 있을까요?
아니면 union이 아닌 다른 방법으로 수행하여 위와 같은 결과를 얻을 수 있을까 하여 질문 드립니다.
여기서 primary key는 number라고 설정 하였습니다.
읽어 주셔서 감사합니다.
생각보다 어렵네요 ㅠ.ㅠ 제가 못하는건지...
Comment 1
-
자리비움
2017.09.13 09:47
WITH T1 AS
(
SELECT [NAME] = 'gim', NUMBER = 111, AGE = 10 UNION ALL
SELECT [NAME] = 'jung', NUMBER = 333, AGE = 20 UNION ALL
SELECT [NAME] = 'you', NUMBER = 555, AGE = 30
)
, T2 AS
(
SELECT [NAME] = 'choi', NUMBER = 222, SEX = 'M' UNION ALL
SELECT [NAME] = 'min', NUMBER = 444, SEX = 'W' UNION ALL
SELECT [NAME] = 'bae', NUMBER = 666, SEX = 'W' UNION ALL
SELECT [NAME] = 'jung', NUMBER = 333, SEX = 'M'
)
SELECT [NAME] = MAX(A.[NAME]), NUMBER, AGE = MAX(AGE), SEX = MAX(SEX)
FROM (
SELECT [NAME], NUMBER, AGE, SEX = NULL
FROM T1
UNION
SELECT [NAME], NUMBER, AGE = NULL, SEX
FROM T2
) AS A
GROUP BY A.NUMBER