나는 두 가지 별도의 쿼리를 결합하고 싶지만 원하는 결과를 얻으려고 애 쓰고 있습니다. 하나는 테이블의 모든 값을 요약하고 다른 하나는 최근 날짜를 기준으로 중복 행을 선택합니다. 첫 번째 쿼리의SQL IN 또는 EXISTS 절 문제
단축 된 버전입니다 :
SELECT a.PLANT_NO "PlantNumber",
SUM(CASE WHEN a.REC_STATUS_CD = 'RR' THEN -a.KW_CTR_REDELIVERED_HV
ELSE a.KW_CTR_REDELIVERED_HV END) "KeepWholeResidueMMBtu",
SUM(a.ETH_APPLIED_POP_PCT + a.ISO_APPLIED_POP_PCT +
(CASE WHEN a.PLANT_NO = '002' THEN a.ALTLIQ_APPLIED_POP_PCT ELSE 0 END)
)/100 "NGLPOPPaymentPercent"
FROM GAS_STMT a
INNER JOIN SETTLE_SUMMARY c
ON CASE WHEN SUBSTR(a.TRNX_ID,1,1) = '-'
THEN SUBSTR(a.TRNX_ID, 2, LENGTH(a.TRNX_ID))
ELSE CAST(a.TRNX_ID AS VARCHAR2(100))
END = c.TRNX_ID
AND a.MTR_NO||a.MTR_SFX = c.MTR_NO||c.MTR_SFX
WHERE TO_CHAR(a.PROD_DT, 'YYYY') >= TO_CHAR(ADD_MONTHS(SYSDATE, -36), 'YYYY')
AND a.STATUS_UNIT_TM_CD = 'M'
GROUP BY a.PLANT_NO
ORDER BY a.PLANT_NO
다른 쿼리는 가장 최근의 거래 날짜를 기준으로 네 개의 트랜잭션을 필터링하는 데 사용됩니다.
SELECT a.*
FROM GAS_STMT a,
(SELECT MTR_NO,MTR_SFX,TRNX_ID,REC_STATUS_CD,MAX(ACCT_DT) ACCT_DT
FROM GAS_STMT
WHERE REC_STATUS_CD = 'RR'
GROUP BY MTR_NO, MTR_SFX, TRNX_ID, REC_STATUS_CD
HAVING COUNT(TRNX_ID) > 1) b
WHERE a.MTR_NO = b.MTR_NO
AND a.TRNX_ID = b.TRNX_ID AND a.REC_STATUS_CD = b.REC_STATUS_CD
AND a.ACCT_DT = b.ACCT_DT
내가
NOT IN
또는
NOT EXISTS
이 두 번째 쿼리에서 제외하는 네 개의 레코드를 제외하고 첫 번째 쿼리의 합이 모든 것을 가지고 어디 사용할 수 있다고 생각
. 사용 EXISTS
첫 번째 쿼리와 동일한 결과를 얻고 NOT EXISTS
을 사용하여 결과가 없습니다. 내가 IN
을 사용할 때 내가 원하는 것과 반대되는 제외 된 레코드의 합계를 얻습니다.
PL/SQL에서이를 수행하는 좋은 방법이 있습니까? 나는 NOT EXISTS
쿼리에 대한 레코드를 얻지 못하고 혼란 스럽습니다. 먼저 조회 결과의
예 :
제 조회 결과 7백45경1천5백15조5백36억9천1백36만3천2백10
- Plant_No - 합계
- 002-100
- 450-50
- 500-50
예 :
- Trnx_ID - Plant_no - KW_CTR_REDELIVERED_HV
- 1234-002 - -.99
- 1235-002 - -.99
의도 한 결과 :
- Plant_No - 합계
- 002-98.02
- 450-50
- 500-50
왜 두 번째 쿼리에서 SQLServer 관련 이름 인용 문자 (예 :'[]')를 사용하는 경우 (Oracle) PL/SQL에 대해 이야기하고 있습니까? –
또한 두 번째 쿼리의 마지막 줄에는 'AND a.ACCT_DT = b.ACCT_DTenter code here' -'여기에 코드 입력 '대신 추가 코드를 입력해야합니까? –
죄송합니다. Management Studio에서 일부 작업을하고있었습니다. 그 끝에는 추가 코드가 없습니다. – jackirons