-
MSSQL UNION과 정렬Database/MSSQL 2017. 5. 26. 10:10반응형
A테이블과 B테이블을 합칠 때
UNION을 쓰면 A와 B의 중복값을 제거하고 합쳐지고,
UNION ALL을 쓰면 A와 B의 중복값을 포함하여 모두 합쳐진다.
이때 중요한 포인트는 A테이블과 B테이블의 열 형식이 같아야 한다.
A테이블
DeviceTime
UserID
UserName
InOut 2017-05-25 08:50
1001
이씨
IN
2017-05-25 08:30
1002
박씨
IN 2017-05-25 09:00
1003
최씨
IN B테이블
DeviceTime
UserID
UserName
InOut 2017-05-25 08:50
1001
이씨
OUT
2017-05-25 08:30
1002
박씨
OUT
2017-05-25 18:00
1003
최씨
OUT
A테이블과 B테이블을 합칠 때
- SELECT * FROM A UNION SELCT * FROM B
- SELECT * FROM A UNION ALL SELECT * FROM B
UNION과 UNION ALL의 결과값은 차이가 없다.
다른 열들이 중복된다고 해도 열 InOut은 중복이 되지 않기 때문이다.
열 InOut을 빼고 UNION을 하면 다음과 같이 나오고,
- SELECT DeviceTime, UserID, UserName FROM A UNION SELECT DeviceTime, UserID, UserName FROM B
DeviceTime
UserID
UserName
2017-05-25 08:50
1001
이씨
2017-05-25 08:30
1002
박씨
2017-05-25 09:00
1003
최씨
2017-05-25 18:00
1003
최씨
UNION ALL은 다음과 같이 나온다.
- SELECT DeviceTime, UserID, UserName FROM A UNION ALL SELECT DeviceTime, UserID, UserName FROM B
DeviceTime
UserID
UserName
2017-05-25 08:50
1001
이씨
2017-05-25 08:50
1001
이씨
2017-05-25 08:30
1002
박씨
2017-05-25 08:30
1002
박씨
2017-05-25 09:00
1003
최씨
2017-05-25 18:00
1003
최씨
이때 합쳐지고 나서 시간별로 정렬하고 싶을 때,
여기선 DeviceTime으로 정렬하는 방법은 다음과 같다.
SELECT DeviceTime, UserID, UserName FROM
(
SELECT DeviceTime, UserID, UserName FROM A
UNION
SELECT DeviceTime, UserID, UserName FROM B
) as abORDER BY DeviceTime
반응형'Database > MSSQL' 카테고리의 다른 글
MSSQL DB 복원 후 사용자 매핑 (How to do user mapping after db restore in SQL Server) (0) 2017.07.27 How to get table schema in SQL Server (MSSQL) (0) 2017.07.10 MSSQL INSERT할 때 최대값+1 (0) 2017.05.25 How to randomly select a value in MSSQL (0) 2017.04.26 MSSQL 행번호, Row Number (0) 2017.04.05