2016-08-23 5 views
1

은행 승인 상태에 따라 기부 액의 합계를 얻고 선물 종류별로 그룹화하려고합니다. 그러나 스크립트는 RR 및 NR 기부를 별도의 줄에 출력합니다 (스크립트 아래 참조). 사례 진술이 전혀 작동하지 않는 것 같습니다.사례 문이 출력에 아무런 영향을 미치지 않습니다.

sum(case 
    when c.bank_approval_status = 'AP' then 
     c.charge_amount else 0 end) approved, 
sum(case  
    when c.bank_approval_status in ('RR','NR') then 
     c.charge_amount else 0 end) rejected, 
sum(case  
    when c.bank_approval_status = 'AR' then 
     -c.charge_amount else 0 end) refunded, 
sum(case 
    when c.bank_approval_status not in ('AR','AP','RR','NR') then 
     c.charge_amount else 0 end) other_status 

그리고 당신의 group by 거의 열 당신 없어야합니다 :

select gift_kind, 
    case 
     when c.bank_approval_status = 'AP' then 
      sum(c.charge_amount) end approved, 
    case  
     when c.bank_approval_status in ('RR','NR') then 
      sum(c.charge_amount) end rejected, 
    case  
     when c.bank_approval_status = 'AR' then 
      sum(c.charge_amount)*-1 end refunded, 
    case 
     when c.bank_approval_status not in ('AR','AP','RR','NR') then 
      sum(c.charge_amount) end other_status 
from charge_log c, transactions t 
where c.account_id=t.account_id 
and c.process_id= 'CHG - 02532' 
and c.gift_date=t.gift_date 
and c.gift_seq=t.gift_seq 
and C.PLEDGE_NUMBER=t.pledge_number 
and t.sts='A' 
group by t.fund_type, t.gift_kind, c.bank_approval_status 
order by gift_kind asc 
+2

'sum()'함수 안에'case'를 넣으십시오. 예 :'sum (c.bank_approval_status = 'AP'then c.charge_amount end)' –

+0

... 최종 조항. – symcbean

답변

0

당신은 당신이 결과로 null을하지 않는 수 있도록 합 내부의 case 조항을 넣어 else 0를 추가해야 집합으로 사용하십시오 (sumbank_approval_status). 로 변경 : 당신의 방식에 따라

group by gift_kind 

는 다른 필드는 group by 절에 추가해야 할 수도 있지만, 그것은 또한 selectorder by 조항에 넣어하는 의미가있다.

+1

또한 GROUP BY – MatBailie

+1

수정 해 주셔서 감사합니다. @MatBailie – trincot

+0

의견을 보내 주셔서 감사합니다! 그러나 나는 당신의 대본을 대신하고 RR과 NR 기부금을 합산하지 않고 분리했습니다. 그 이유에 대한 어떤 생각? –

3

나는이 논리를 찾고 있습니다 믿습니다

select gift_kind, 
     sum(case when c.bank_approval_status = 'AP' then c.charge_amount 
      end) as approved, 
     sum(case when c.bank_approval_status in ('RR', 'NR') then c.charge_amount 
      end) as rejected, 
     sum(case when c.bank_approval_status in ('AR') then c.charge_amount*-1 
      end) as refunded, 
     sum(case when c.bank_approval_status not in ('AR','AP','RR','NR') then c.charge_amount 
      end) other_status 
from charge_log c join 
    transactions t 
    on c.account_id = t.account_id and 
     c.gift_date = t.gift_date and 
     c.gift_seq = t.gift_seq and 
     C.PLEDGE_NUMBER = t.pledge_number 
where c.process_id = 'CHG - 02532' and t.sts = 'A' 
group by t.fund_type, t.gift_kind 
order by gift_kind asc 

참고 :

  • 적절한 JOIN 구문을 사용하는 방법에 대해 알아보세요. 쉼표는 FROM 절에 사용하십시오.
  • JOIN 조건은 모두 절에 있어야하며 WHERE 절에 있어야합니다.
  • CASESUM()에 대한 인수입니다.
  • GROUP BY에서 bank_approval_status을 제거하십시오.
  • fund_typeGROUP BY 인 이유를 모르겠습니다. 당신은 그 이유가 있을지도 모릅니다.
+3

고든, 고든, 고마워. 정확히 내가 필요로하는 것. 나는 그 메모를 마음에 담을 것입니다. 저는 여기서 일하는 법을 배우기 때문에, 당신의 의견을 매우 높이 평가할 수 있습니다. –

관련 문제