엑셀 로직을 쿼리로 바꿔야 해서 넘 어렵네요....도와주세요
아래 로직 보시고 쿼리로 가능하면 부탁드립니다.
| 예상순서 | 실제순서 | 준수구분 | 로직설명 |
| 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 |
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
;
마농님 감사합니다.
쿼리 잘 사용하겠습니다.
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
;
마농님 감사합니다. 데이터를 확인하니 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로 변경하는 로직을 넣었습니다.
감사합니다
문제의 설명이 이해가 안가서?
데이터만 보고 나름 다르게 해석하여 풀이하고 답변 드렸습니다.
지금 올려주신 쿼리도 무슨 내용인지 이해가 안가네요.
설명이 애매모호합니다.
자세히 설명드리자면 일별 생산계획 준수확인용입니다
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입니다.
이후 설명은 위와 동일합니다.
추가설명 말고 이후 설명은 위와 동일하다고 하셨는데
저는 그 위와 동일하다는 설명이 이해가 안갑니다.
위와 동일하다는 말은 처음 로직설명부분을 말한겁니다.
엑셀로직 확인해서 설명하다보니 제 설명이 부족했나 봅니다. ㅎㅎㅎ
암튼 신경써 주셔서 감사합니다.
다음에 다른 문제들도 부탁드리겠습니다
네. 그 설명은 뭔가 앞뒤가 맞지 않는 듯 하여 이해하기 어려웠습니다.
저는 데이터만 보고 제 나름대로 별도 규칙을 세우고 풀이했습니다.
그리고 추가로 올려주신 쿼리도 맞는 쿼리인지? 의심이 들었습니다.