2017-12-13 20 views
1

내가 두 경우의 차이를하려고 노력하고 CASE의 차이 (마이너스) :DB2의 SQL - 다음과 같은 DB2 환경에서 때

select DISTINCT 
TLORDER.BILL_NUMBER, 
TLORDER.XCHARGES, 
TLORDER.CHARGES, 
TLORDER.DISTANCE, 
TLORDER.CREATED_TIME, 
TLORDER.DESTCITY, 
(CASE WHEN ODRSTAT.STATUS = '5ARRCONS' THEN MAX(ORDSTAT.CHANGED) 
END - 
CASE WHEN ODRSTAT.STATUS = 'PICKD' THEN MIN(ODRSTAT.CHANGED) 
END) AS DETENTION 
FROM ODRSTAT 
LEFT JOIN TLORDER ON ODRSTAT.ORDER_ID = TLORDER.DETAIL_LINE_ID 

내가 온라인으로 여러 가지를 사용하여이 개념의 몇 가지 변화를 시도 ressources하고 합계에 대한 많은 해답을 찾았지만 동일한 열을 사용하는 차이는 아닙니다.

목표는 Col. STATUS의 상태가 '5arrcons'인 경우 Col. Status의 상태가 최신 날짜 (같은 열의 CHANGED)에서 'pickd'인 경우 가장 오래된 날짜 (col. CHANGED)를 빼는 것입니다. MAX = 2017년 12월 10일 최소 = 2017년 12월 1일

그래서 (것이 경우에 CASE 문에서 원하는 결과를

Key ORDER_ID STATUS  CHANGED 
1 10   5ARRCONS 12/10/2017 
2 10   OTHER  12/10/2017 
3 10   PICKD  12/5/2017 
4 10   OTHER  12/3/2017 
5 10   PICKD  12/1/2017 

:

는 다음과 같은 데이터 집합을 고려 12/10/2017 - 12/1/2017)은 912380입니다 9 무엇을 돌려 주겠습니까?

모든 도움을 주실 수 있습니다.
감사합니다.

+0

질문을 편집하고 샘플 데이터와 원하는 결과를 제공하십시오. 작동하지 않는 SQL 코드는 실제로 의미가 없습니다. –

답변

1

정확히 원하는 것을 말하기 어렵습니다. 그러나 이것이 원하는 것일 수도 있습니다 :

SELECT o.BILL_NUMBER, o.XCHARGES, o.CHARGES, o.DISTANCE, o.CREATED_TIME, o.DESTCITY, 
     (MAX(CASE WHEN os.STATUS = '5ARRCONS' THEN os.CHANGED END) - 
     MIN(CASE WHEN os.STATUS = 'PICKD' THEN os.CHANGED END) 
     ) AS DETENTION 
FROM ODRSTAT os JOIN 
    TLORDER o 
    ON os.ORDER_ID = o.DETAIL_LINE_ID 
GROUP BY o.BILL_NUMBER, o.XCHARGES, o.CHARGES, o.DISTANCE, o.CREATED_TIME, o.DESTCITY; 
+0

감사합니다 고든, 매력처럼 작동합니다! 비슷한 질문을 던지려는 사람들을 위해 제 질문을 편집했습니다. 좋은 하루 되세요! – Jomathr