쿼리 좀 만들어 주세요!! 0 9 2,348

by 큐니백작 [SQL Query] 엑셀 값비교 쿼리 [2023.05.31 16:57:00]


엑셀 로직을 쿼리로 바꿔야 해서 넘 어렵네요....도와주세요

아래 로직 보시고 쿼리로 가능하면 부탁드립니다.

예상순서 실제순서 준수구분 로직설명
1 1 Y 실제순서 1행~1행 범위내에 실제순서 1행-1의 값(1)이 있으면 Y 아니면 N
2 3 N 실제순서 1행~2행 범위내에 실제순서 2행-1의 값(2)이 있으면 Y 아니면 N
3 2 Y 실제순서 1행~3행 범위내에 실제순서 3행-1의 값(1)이 있으면 Y 아니면 N
4 5 N 실제순서 1행~4행 범위내에 실제순서 4행-1의 값(4)이 있으면 Y 아니면 N
5 4 Y 실제순서 1행~5행 범위내에 실제순서 5행-1의 값(3)이 있으면 Y 아니면 N

 

 

by 마농 [2023.05.31 23:10:05]
WITH t AS
(
SELECT 1 plan_seq, 1 real_seq FROM dual
UNION ALL SELECT 2, 3 FROM dual
UNION ALL SELECT 3, 2 FROM dual
UNION ALL SELECT 4, 5 FROM dual
UNION ALL SELECT 5, 4 FROM dual
)
SELECT a.plan_seq
     , a.real_seq
     , NVL2(b.plan_seq, 'Y', 'N') yn
  FROM t a
  LEFT OUTER JOIN t b
    ON a.plan_seq >= b.plan_seq
   AND a.real_seq  = b.plan_seq
 ORDER BY a.plan_seq
;

 


by 큐니백작 [2023.06.01 08:52:23]

마농님 감사합니다.

쿼리 잘 사용하겠습니다.


by 마농 [2023.06.01 09:33:03]
WITH t AS
(
SELECT 1 plan_seq, 1 real_seq FROM dual
UNION ALL SELECT 2, 3 FROM dual
UNION ALL SELECT 3, 2 FROM dual
UNION ALL SELECT 4, 5 FROM dual
UNION ALL SELECT 5, 4 FROM dual
)
SELECT plan_seq
     , real_seq
     , DECODE(
       INSTR(SYS_CONNECT_BY_PATH(real_seq, '-')||'-', '-'||plan_seq||'-')
       , 0, 'N', 'Y') yn
  FROM t
 START WITH plan_seq = 1
 CONNECT BY PRIOR plan_seq + 1 = plan_seq
;

 


by 큐니백작 [2023.06.01 10:34:19]
마농님 감사합니다.

데이터를 확인하니 real_seq가 plan_seq와 같은 범위에 있지 않은 경우가 있어서 쿼리를 임의로 수정하여 사용했습니다.

WITH T AS
(SELECT 1 PLAN_SEQ, 3 REAL_SEQ FROM DUAL UNION ALL
 SELECT 2 PLAN_SEQ, 4 REAL_SEQ FROM DUAL UNION ALL
 SELECT 3 PLAN_SEQ, 7 REAL_SEQ FROM DUAL UNION ALL
 SELECT 4 PLAN_SEQ, 5 REAL_SEQ FROM DUAL UNION ALL
 SELECT 5 PLAN_SEQ, 6 REAL_SEQ FROM DUAL)

 SELECT a.plan_seq, a.real_seq, DECODE(a.plan_seq, 1, 'Y', NVL2(b.plan_seq, 'Y', 'N')) yn
 from t a left outer join t b
 on a.plan_seq >= b.plan_seq
 and a.real_seq - 1 = b.real_seq
 order by plan_seq
;

첫번째 YN은 무조건 N으로 나와서 Y로 변경하는 로직을 넣었습니다.

감사합니다


by 마농 [2023.06.01 10:40:34]

문제의 설명이 이해가 안가서?
데이터만 보고 나름 다르게 해석하여 풀이하고 답변 드렸습니다.
지금 올려주신 쿼리도 무슨 내용인지 이해가 안가네요.
설명이 애매모호합니다.


by 큐니백작 [2023.06.01 11:01:02]

자세히 설명드리자면 일별 생산계획 준수확인용입니다

WITH T AS
(SELECT '20230601' PLAN_DATE, 0 PLAN_SEQ, '20230531' REAL_DATE, 1 REAL_SEQ FROM DUAL UNION ALL
 SELECT '20230601' PLAN_DATE, 0 PLAN_SEQ, '20230531' REAL_DATE, 2 REAL_SEQ FROM DUAL UNION ALL
 SELECT '20230601' PLAN_DATE, 1 PLAN_SEQ, '20230601' REAL_DATE, 3 REAL_SEQ FROM DUAL UNION ALL
 SELECT '20230601' PLAN_DATE, 2 PLAN_SEQ, '20230601' REAL_DATE, 5 REAL_SEQ FROM DUAL UNION ALL
 SELECT '20230601' PLAN_DATE, 3 PLAN_SEQ, '20230601' REAL_DATE, 4 REAL_SEQ FROM DUAL UNION ALL
 SELECT '20230601' PLAN_DATE, 4 PLAN_SEQ, '20230601' REAL_DATE, 6 REAL_SEQ FROM DUAL UNION ALL
 SELECT '20230601' PLAN_DATE, 5 PLAN_SEQ, '20230601' REAL_DATE, 7 REAL_SEQ FROM DUAL )

데이터는 금일 생산계획대비 실제생산 데이터인데 REAL_DATE가 오늘이 아닌 경우는 준수구분이 자동 N이고 PLAN_SEQ가 0입니다.

이후 설명은 위와 동일합니다.

 

 


by 마농 [2023.06.01 11:21:25]

추가설명 말고 이후 설명은 위와 동일하다고 하셨는데
저는 그 위와 동일하다는 설명이 이해가 안갑니다.


by 큐니백작 [2023.06.01 13:24:18]

위와 동일하다는 말은 처음 로직설명부분을 말한겁니다.

엑셀로직 확인해서 설명하다보니 제 설명이 부족했나 봅니다. ㅎㅎㅎ

암튼 신경써 주셔서 감사합니다.

다음에 다른 문제들도 부탁드리겠습니다


by 마농 [2023.06.01 13:27:32]

네. 그 설명은 뭔가 앞뒤가 맞지 않는 듯 하여 이해하기 어려웠습니다.
저는 데이터만 보고 제 나름대로 별도 규칙을 세우고 풀이했습니다.
그리고 추가로 올려주신 쿼리도 맞는 쿼리인지? 의심이 들었습니다.

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