쿼리 문의 드립니다 0 7 5,133

by 송현욱 [Oracle 기초] [2024.02.01 18:57:33]


안녕하세요.

*데이타

AA     BB   CC   DD

가        나    다     10

가        나     다     -10

가         나     다    20

라         마       바  10

라         마        바  10

 

조회결과

라 마 바 10 만 나와야합니다

위처럼 aa  bb  cc컬럼으로  구룹해서 1행 2행을 dd를 합산하면 0이 되는데요

그럼 

가 나 다 0

가  나 다 20 이 되니 중복데이타가 아니니 결과에서 제외하고 라 마 바 10  처럼 중복되는 데이타만 추출가능할까요?

 

by 마농 [2024.02.02 00:25:54]

설명만으로는 석연치 않은 부분이 많은데요.
좀 더 다양하고 복잡한 예시자료로 질문해 주실 수 있나요?
원본 대비 출력 자료도 표형태로 보여주세요.

예를 들면 (가 나 다) 에 (10, -10, 20, -20) 이 있다면?
합해서 0 이 되는 묵음은 하나로 합쳐지고
(0, 0) 이 되면 중복인가요?
출력은 어떤 형태로 해야 하는지?

만약, (가 나 다) 에 (10, -10, -10, 10, 10) 이 있다면?
(0, 0, 10) 이 되는 건가요?
이런 자료는 중복인가요? 아닌가요?
출력은 어떤 형태로 해야 하는지?

(라 마 바) 엔 (10, 10) 이라 중복이라 출력인데?
출력은 한번만 하는지 두번 다 하는지?
만약 (라 마 바) 에 (10) 이 1건 뿐이라면?
이건 중복인가요? 아닌가요?
출력은 어떤 형태로 해야 하는지?
 


by 송현욱 [2024.02.02 09:17:37]

네  마농님 안녕하세요.

Aa bb  cc칼럼이 동일할때  dd가 10 이있고 여기서 그대로 마이너만 붙은  -10이존재하는건은 제외입니다. 이건 중복아님

즉, 합산이 0이여도 10, -4, -6 이런것도 합산해도 0이지만 이건 중복포함.

 

*데이타

AA     BB   CC   DD

가        나    다     10

가        나     다     -10

가         나     다    20

라         마       바  10

라         마        바  10

출력 라마바 10

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

*데이타

AA     BB   CC   DD

가        나    다     10

가        나     다     -4

가         나     다    -6

가         나     다   10

라         마       바  10

라         마        바  10

출력 가나다10

         라마바10

 

 


by 송현욱 [2024.02.02 09:23:27]

즉, 10 있고 그대로 마이너스를 붙인 -10 이 존재하면 그건 중복으로 안본다는겁니다


by 마농 [2024.02.02 09:39:23]

(10, -10, 10, -10) 이 (0, 0) 이 되면 0 이 중복되어 출력인가요?
아니면 0 이 되는 건 제외하는 건가요?


by 마농 [2024.02.02 10:08:23]
WITH t AS
(
SELECT '가' aa, '나' bb, '다' cc, 10 dd FROM dual
UNION ALL SELECT '가', '나', '다', -10 FROM dual
UNION ALL SELECT '가', '나', '다',  20 FROM dual
UNION ALL SELECT '라', '마', '바',  10 FROM dual
UNION ALL SELECT '라', '마', '바',  10 FROM dual
UNION ALL SELECT '사', '아', '자',  10 FROM dual
UNION ALL SELECT '사', '아', '자',  -4 FROM dual
UNION ALL SELECT '사', '아', '자',  -6 FROM dual
UNION ALL SELECT '사', '아', '자',  10 FROM dual
UNION ALL SELECT '차', '카', '타',  10 FROM dual
UNION ALL SELECT '차', '카', '타', -10 FROM dual
UNION ALL SELECT '차', '카', '타', -10 FROM dual
UNION ALL SELECT '차', '카', '타',  10 FROM dual
UNION ALL SELECT '차', '카', '타',  10 FROM dual
UNION ALL SELECT '타', '파', '하',  10 FROM dual
UNION ALL SELECT '타', '파', '하',  10 FROM dual
UNION ALL SELECT '타', '파', '하',  20 FROM dual
UNION ALL SELECT '타', '파', '하',  20 FROM dual
)
SELECT aa, bb, cc, dd
  FROM (SELECT aa, bb, cc
             , SUM(dd) dd
          FROM (SELECT aa, bb, cc, dd
                     , ROW_NUMBER() OVER(PARTITION BY aa, bb, cc, dd ORDER BY 1) rn
                  FROM t
                )
         GROUP BY aa, bb, cc, ABS(dd), rn
         ORDER BY aa, bb, cc, ABS(dd), rn
        )
-- WHERE dd != 0
 GROUP BY aa, bb, cc, dd
HAVING COUNT(*) > 1
 ORDER BY aa, bb, cc, dd
;

 


by 송현욱 [2024.02.02 11:48:43]

네 감사합니다

10, -10, 10, -10) 이 (0, 0) 이 되면 중복제외입니다


by 마농 [2024.02.02 12:59:28]

중복 제외요???
중복 출력이 목적 아니었나요?

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