[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.대신이 시도 :
대신이 시도 :
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.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.조건이 더 효율성을 생성하는, 당신이 원하는 경우에 당신이하지 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;
from https://stackoverflow.com/questions/4517681/sql-sum-with-condition by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 때 왼쪽 외부 조인을 사용 하는가? (0) | 2020.05.19 |
---|---|
[SQL] SQL에서 링크 된 목록 (0) | 2020.05.19 |
[SQL] 방법 정규식에서 MySQL의 쿼리 (0) | 2020.05.19 |
[SQL] 서브 쿼리와 MySQL을 업데이트 쿼리 (0) | 2020.05.19 |
[SQL] 역사 / 감사 데이터베이스 (0) | 2020.05.19 |