우리나라 건강보험 빅데이터를 가지고 열심히 자료 정리를 하고 있는 1인입니다.
파일하나가 10기가가 넘다보니 SQL SERVER가 아니면 파일조차 읽지를 못하네요 ㅎ 그래서 책을 보고 하나하나 시작하고 있습니다.
다름이 아니라, 다음과 같은 조건으로 데이터를 뽑아내고 싶을 때 어떻게 쿼리문을 작성하면 될까요?
먼저 database A의 테이블 A와 database B의 테이블 B가 있습니다. 그런데, 테이블 A와 B는 서로 b라는 열을 공유하고 있고, 테이블 A의 용량이 월등히 큽니다. 그래서, 테이블 B에 있는 b열에 존재하는 값과 테이블 A에 있는 b열에 존재하는 값이 일치하는 행의 데이터만 테이블 B에 추가하고 싶습니다. 도식으로 표시해 보면,
DB A의 table A
a b c d
1 ㄱ 1 가 !
2 ㄱ 2 나 @
3 ㄱ 3 다 #
4 ㄴ 4 라 $
5 ㄴ 5 마 %
6 ㄷ 6 사 ^
DB B의 table B
b e f
1 2 기 그
2 3 니 느
3 4 디 드
4 6 리 르
두 테이블에서 열 b가 공통이고 테이블 A와 B의 열 b가 공통적으로 들어간 행의 테이블 A에서의 모든 행값을 테이블 B에 붙이는 새로운 테이블을 만들고자 합니다. 즉 결과적으로는,
새로운 테이블 C(아래처럼 만들고 싶습니다!)
a b c d e f
1 ㄱ 2 나 @ 기 그
2 ㄱ 3 다 # 니 느
3 ㄴ 4 라 $ 디 드
4 ㄷ 6 사 ^ 리 르
이렇게 결과를 내는 쿼리문을 만들고 싶습니다. 책대로 하려고 하는데 잘 모르겠습니다 ㅠ
그리고 한가지만 궁금한 것이, 새로운 테이블 C에서 a 열의 1,2번 행이 둘다 "ㄱ"으로 겹치는데, 겹치는 행은 버리고 하나만 나타내도록 할 수 있을지요.
예를 들면
a b c d e f
1 ㄱ 2 나 @ 기 그
2 ㄴ 4 라 $ 디 드
3 ㄷ 6 사 ^ 리 르
이렇게나,
a b c d e f
1 ㄱ 3 다 # 니 느
2 ㄴ 4 라 $ 디 드
3 ㄷ 6 사 ^ 리 르
이렇게로요.
가르침 부탁드립니다.
감사합니다.
Comment 1
-
NOTE
2017.03.23 11:18
WITH TEMP01 (C001, C002, C003, C004)
As (
SELECT 'ㄱ', 1, '가', '!' UNION ALL
SELECT 'ㄱ', 2, '나', '@' UNION ALL
SELECT 'ㄱ', 3, '다', '#' UNION ALL
SELECT 'ㄴ', 4, '라', '$' UNION ALL
SELECT 'ㄴ', 5, '마', '%' UNION ALL
SELECT 'ㄷ', 6, '사', '^'
)
SELECT * INTO #TEMP01 FROM TEMP01;
WITH TEMP02 (C001, C002, C003)
As (
SELECT 2, '기', '그' UNION ALL
SELECT 3, '니', '느' UNION ALL
SELECT 4, '디', '드' UNION ALL
SELECT 6, '리', '르'
)
SELECT * INTO #TEMP02 FROM TEMP02;
SELECT A.C001
, MIN(A.C002) As C002
, MIN(A.C003) As C003
, MIN(A.C004) As C004
, MIN(B.C002) As C005
, MIN(B.C003) As C006
FROM #TEMP01 As A INNER JOIN #TEMP02 As B ON A.C002 = B.C001
GROUP BY A.C001
이렇게하면 결과값이 나오기는 하는데 맞으련지...