반응형
조건이있는 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
전체 설명이 없어서 미안하지만 저장 프로 시저의 컨텍스트에 따라 정말 길고 구체적이지만 누군가가 내가 의미하는 바를 알기를 바랐습니까?
대신 이것을 시도하십시오.
SUM(CASE WHEN ValueDate > @startMonthDate THEN cash ELSE 0 END)
설명
CASE 표현식에 잘못된 구문이 있습니다. 간단한 CASE 표현식 구문과 검색된 CASE 표현식 구문을 혼동하고있는 것 같습니다. CASE에 대한 문서를 참조하십시오 .
CASE 표현식에는 두 가지 형식이 있습니다.
- 단순 CASE 식은 식을 단순 식 집합과 비교하여 결과를 결정합니다.
- 검색된 CASE 표현식은 결과를 결정하기 위해 부울 표현식 세트를 평가합니다.
검색된 CASE 표현식 구문이 필요합니다.
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
참고로 성능이 문제인 경우 종속 하위 쿼리를 사용하는 대신 JOIN 및 GROUP BY를 사용하여 다시 작성하면이식이 더 빨리 실행된다는 것을 알 수 있습니다.
이동 시도 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'을 사용하는 것을 고려할 수도 있습니다. 두 가지 방식 모두 올바르게 작동하지만 의도가 무엇인지 더 잘 나타낼 수 있습니다.
조건 HAVING을 사용하면 원하는 경우 ultrapass 0이 아닌 현금으로 데이터를 제거하여 쿼리의 효율성을 높일 수 있습니다.
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;
참고 URL : https://stackoverflow.com/questions/4517681/sql-sum-with-condition
반응형
'IT Share you' 카테고리의 다른 글
| Scala를 위해 Eclipse에서 실행 구성 (0) | 2020.12.11 |
|---|---|
| Custom ViewGroup 내에서 XML-Layout-File을 올바르게 팽창시키는 방법은 무엇입니까? (0) | 2020.12.11 |
| JS .call () 메서드를 사용하는 이유는 무엇입니까? (0) | 2020.12.11 |
| 명령 줄에서 입력 숨기기 (0) | 2020.12.11 |
| WinRT에서 리플렉션을 사용하여 호출 된 비동기 개인 메서드를 기다리는 방법은 무엇입니까? (0) | 2020.12.11 |