안녕하세요.
DB에 아래와 같은 데이터가 들어가 있습니다.
ID |
필드1 |
필드2 |
필드3 |
필드4 |
필드5 |
필드6 |
1 |
3 |
66 |
78 |
52 |
4 |
20 |
2 |
66 |
52 |
11 |
2 |
1 |
99 |
3 |
21 |
25 |
67 |
84 |
250 |
2 |
4 |
4 |
10 |
20 |
78 |
66 |
1 |
5 |
22 |
67 |
250 |
2 |
25 |
84 |
6 |
4 |
8 |
7 |
6 |
120 |
99 |
7 |
77 |
45 |
16 |
13 |
3 |
9 |
8 |
8 |
5 |
2 |
4 |
111 |
78 |
9 |
68 |
64 |
15 |
18 |
17 |
28 |
10 |
84 |
25 |
67 |
22 |
250 |
1 |
.
.
.
여기에서 필드 1~6사이에 중복된 숫자 4개 이상이 들어 있는 ROW를 추출해야 하는데요.
아래와 같은 결과가 나와야 합니다.
결과 |
||||||
ID |
필드1 |
필드2 |
필드3 |
필드4 |
필드5 |
필드6 |
1 |
3 |
66 |
78 |
52 |
4 |
20 |
3 |
21 |
25 |
67 |
84 |
250 |
2 |
4 |
4 |
10 |
20 |
78 |
66 |
1 |
5 |
22 |
67 |
250 |
2 |
25 |
84 |
10 |
84 |
25 |
67 |
22 |
250 |
1 |
데이터 양이 적으면 그냥 루프 같은거 돌려서 추출해 보겠는데
데이터 양이 몇백만개가 되는터라 쿼리에서 해결해야 하는 상황입니다. ㅜㅜ
하루종일 이렇게 저렇게 해 봐도 결과가 안나와서 도움 청해 봅니다.
도움 부탁드립니다.
개발 DB : MDB or MS SQL
개발툴 : VB6 입니다.
WITH t(id, c1, c2, c3, c4, c5, c6) AS ( SELECT 1, 3, 66, 78, 52, 4, 20 UNION ALL SELECT 2, 66, 52, 11, 2, 1, 99 UNION ALL SELECT 3, 21, 25, 67, 84, 250, 2 UNION ALL SELECT 4, 4, 10, 20, 78, 66, 1 UNION ALL SELECT 5, 22, 67, 250, 2, 25, 84 UNION ALL SELECT 6, 4, 8, 7, 6, 120, 99 UNION ALL SELECT 7, 77, 45, 16, 13, 3, 9 UNION ALL SELECT 8, 8, 5, 2, 4, 111, 78 UNION ALL SELECT 9, 68, 64, 15, 18, 17, 28 UNION ALL SELECT 10, 84, 25, 67, 22, 250, 1 ) -- MSSQL -- SELECT DISTINCT b.id FROM t UNPIVOT (c FOR gb IN (c1, c2, c3, c4, c5, c6)) a INNER JOIN t b ON a.id != b.id AND a.c IN (b.c1, b.c2, b.c3, b.c4, b.c5, b.c6) GROUP BY a.id, b.id HAVING COUNT(*) >= 4 ;