쿼리 질문 드립니다. 0 2 178

by 하얀앙마 [SQL Query] [2018.04.13 17:20:25]


안녕하세요. 

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 입니다. 

 

by 우리집아찌 [2018.04.14 10:45:28]

일단 문제가 이해안됩니다.

일단 중복된 숫자가 4건이 저는 안보이네요.


by 마농 [2018.04.16 08:59:33]
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
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입