복붙노트

[SQL] 조건 SQL 합

SQL

조건 SQL 합

나는 현재 내가 각 트랜잭션 ID의 총 현금 (이 고유) 얻기 위해 다음 행을 추가 큰 SQL 문이 :

select sum(cash) from Table a where a.branch = p.branch 
and a.transID = p.transID) TotalCash

그리고 난 이제 동일한 작업을 수행하지만 지난 달 내에 valuedate이 현금 값을 총, 나는 이런 식으로 뭔가를 수 있도록해야합니다

select sum(CASE ValueDate WHEN > @startMonthDate THEN cash ELSE NULL END) 
from Table a where a.branch = p.branch and a.transID = p.transID) TotalMonthCash

미안 전체 문을 해달라고,하지만 정말 길고, 저장 프로 시저의 컨텍스트에 특정하지만 누군가가 무슨 뜻인지 알 것 기대했다 있다고?

해결법

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

    1.대신이 시도 :

    대신이 시도 :

    SUM(CASE WHEN ValueDate > @startMonthDate THEN cash ELSE 0 END)
    

    설명

    귀하의 CASE 식은 잘못된 구문이 있습니다. 당신이이 CASE 표현식 구문을 검색과 간단한 CASE 표현식 구문을 혼동하는 것 같다. CASE에 대한 설명서를 참조하십시오 :

    당신은이 CASE 표현식 구문을 검색합니다 :

    CASE
         WHEN Boolean_expression THEN result_expression [ ...n ] 
         [ ELSE else_result_expression ] 
    END
    

    성능이 문제가되는 경우 측면 참고로, 당신은 당신이 종속 하위 쿼리를 사용하는 대신 JOIN을 사용하여 재 작성 및 GROUP BY 경우,이 표현이 더 빠르게 실행되는 것을 알 수 있습니다.

  2. ==============================

    2.ValueDate 이동하십시오 :

    ValueDate 이동하십시오 :

    select sum(CASE  
                 WHEN ValueDate > @startMonthDate THEN cash 
                  ELSE 0 
               END) 
     from Table a
    where a.branch = p.branch 
      and a.transID = p.transID
    

    (명확성을 위해 재 포맷)

    당신은 또한 당신이 합을하고 같이 NULL 대신 '0'를 사용하는 것이 좋습니다. 그것은 정확하게 두 가지를 작동하지만, 당신의 의도가 무엇인지 어쩌면 더 indicitive입니다.

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

    3.조건이 더 효율성을 생성하는, 당신이 원하는 경우에 당신이하지 0 ultrapass 현금으로 데이터를 제거합니다 갖는 쿼리한다.

    조건이 더 효율성을 생성하는, 당신이 원하는 경우에 당신이하지 0 ultrapass 현금으로 데이터를 제거합니다 갖는 쿼리한다.

    SELECT SUM(cash) AS money FROM Table t1, Table2 t2 WHERE t1.branch = t2.branch 
    AND t1.transID = t2.transID
    AND ValueDate > @startMonthDate HAVING money > 0;
    
  4. from https://stackoverflow.com/questions/4517681/sql-sum-with-condition by cc-by-sa and MIT license