복붙노트

[SQL] CASE 조건 및 SUM과 SELECT 쿼리 ()

SQL

CASE 조건 및 SUM과 SELECT 쿼리 ()

나는 현재이 SQL 문을 사용하고 있습니다. 내 표는 "현금"또는 "확인"을 포함하는 필드 CPaymentType 있습니다. 나는 아래 그림과 같이 2 SQL 문을 실행하여 지불의 양을 요약 할 수 있습니다. 이 SQL 문하거나 1을 실행할 때 이런 경우, 사용자는하지만, 난 그냥 한 SQL 문을 원하는, 내 방식 좋아하지 않아, 속도 차이를 통지하지 않습니다. 어떻게 CASE 조건 1 문에이를 재구성합니까? 예 온라인 1 또는 0 또는 부울 결과 때문에 나는 그것을 알아낼 수 없습니다. 나는 날짜를 늦춰 확인 지불을 포함하지 않습니다. 대단히 감사합니다.

Select SUM(CAmount) as PaymentAmount 
from TableOrderPayment 
where CPaymentType='Cash' and CStatus='Active';

Select SUM(CAmount) as PaymentAmount 
from TableOrderPayment 
where CPaymentType='Check' and CDate<=SYSDATETIME() and CStatus='Active';

해결법

  1. ==============================

    1.

    Select SUM(CASE When CPayment='Cash' Then CAmount Else 0 End ) as CashPaymentAmount,
           SUM(CASE When CPayment='Check' Then CAmount Else 0 End ) as CheckPaymentAmount
    from TableOrderPayment
    Where ( CPayment='Cash' Or CPayment='Check' ) AND CDate<=SYSDATETIME() and CStatus='Active';
    
  2. ==============================

    2.

    select CPaymentType, sum(CAmount)
    from TableOrderPayment
    where (CPaymentType = 'Cash' and CStatus = 'Active')
    or (CPaymentType = 'Check' and CDate <= bsysdatetime() abd CStatus = 'Active')
    group by CPaymentType
    

    건배 -

  3. ==============================

    3.별도의 열의 각 합계를 얻으려면 :

    별도의 열의 각 합계를 얻으려면 :

    Select SUM(IF(CPaymentType='Check', CAmount, 0)) as PaymentAmountCheck,
           SUM(IF(CPaymentType='Cash', CAmount, 0)) as PaymentAmountCash
    from TableOrderPayment
    where CPaymentType IN ('Check','Cash') 
    and CDate<=SYSDATETIME() 
    and CStatus='Active';
    
  4. ==============================

    4.사용에 "또는"

    사용에 "또는"

    Select SUM(CAmount) as PaymentAmount 
    from TableOrderPayment 
    where (CPaymentType='Check' Or CPaymentType='Cash')
       and CDate <= case CPaymentType When 'Check' Then SYSDATETIME() else CDate End
       and CStatus='" & "Active" & "'"
    

    또는 "IN"

    Select SUM(CAmount) as PaymentAmount 
    from TableOrderPayment 
    where CPaymentType IN ('Check', 'Cash')
       and CDate <= case CPaymentType When 'Check' Then SYSDATETIME() else CDate End
       and CStatus='" & "Active" & "'"
    
  5. ==============================

    5.난 당신이 경우 문을 필요가 있다고 생각하지 않습니다. 당신은 당신의 where 절을 업데이트해야하고 당신이 조항 그룹에 올바른 괄호를합니다.

    난 당신이 경우 문을 필요가 있다고 생각하지 않습니다. 당신은 당신의 where 절을 업데이트해야하고 당신이 조항 그룹에 올바른 괄호를합니다.

    SELECT Sum(CAMount) as PaymentAmount 
    from TableOrderPayment 
    where (CStatus = 'Active' AND CPaymentType = 'Cash') 
    OR (CStatus = 'Active' and CPaymentType = 'Check' and CDate<=SYSDATETIME())
    

    내 이전에 게시 한 응답에서는 CDate <= SYSDATETIME는 ()도 현금 지불 유형뿐만 아니라 적절한 것을 가정한다. 나는 단지 수표 지급이 절을 찾습니다 그래서 난 내를 분할 생각합니다.

  6. from https://stackoverflow.com/questions/20935265/select-query-with-case-condition-and-sum by cc-by-sa and MIT license