2013-07-12 7 views
2

SQL Server 2008 R2에서 작업하고 있습니다. 나는 그 총액을 얻으려고 노력하고있다. 나는 그것이 오류 다음 내게 줄 실행하면SQL 서버에서 SUM 함수가있는 CASE 문 사용

이 내 쿼리

select 
    SUM(
    case 
     when sec.SecurityTypeID = 2 then SUM(quantity)*(sec.AnnualIncomeRate/100) 
     when sec.SecurityTypeID = 5 then 0 
     when sec.SecurityTypeID = 11 then SUM(quantity)*sec.AnnualIncomeRate  
     else SUM(quantity)*sec.AnnualIncomeRate 
    end 
) AS ProjectedIncome 
from Transactions as t 

입니다.

메시지 130, 수준 15, 상태 1, 줄 3
는 집계 또는 하위 쿼리가 포함 된 식에서는 집계 함수를 수행 할 수 없습니다.

가 나는 경우 절과 함께 SUM 함수를 사용하고 알고있다. 그러나 나는이 사건 진술과 합을 찾아야한다.

답변

5

실제로; 너 group이 없으므로 case은 행당입니다. SUM(quantity)은 단일 행을 나타낼 때 크게 의미가 없습니다. 전체 집합에 대해 SUM 인 경우 먼저을 변수로 계산해야합니다. 그렇지 않다면 내부/SUM에 적용 할 그룹/파티션을 생각해야합니다.

select 1 as [a], 2 as [b], 3 as [c] 

을하고이 작품 :

이 작동 :

select case [a] when 1 then [b] else [c] end from (
    select 1 as [a], 2 as [b], 3 as [c] 
) x 

을하지만 그렇지 않은 : 마찬가지로

select case [a] when 1 then sum([b]) else [c] end from (
    select 1 as [a], 2 as [b], 3 as [c] 
) x 

,이

비슷한 예제를 제공합니다 작품 :

select sum(case [a] when 1 then [b] else [c] end) from (
    select 1 as [a], 2 as [b], 3 as [c] 
) x 

하지만하지 않습니다, 당신이보고 동일한 오류 메시지 제공 :

select sum(case [a] when 1 then sum([b]) else [c] end) from (
    select 1 as [a], 2 as [b], 3 as [c] 
) x 
+0

감사합니다. 현재 일부는 다른 쿼리 쿼리를 사용하여 혼란 스럽습니다. 하지만 너는 나를 더 잘 이해한다. 다시 한번 감사드립니다. –

0

하지이 경우에 있지만 내가 파생 테이블이 걸릴 만드는 것이 무엇 초 확인을

select SUM(t.caseValue) AS ProjectedIncome 
from (select * , case 
     when sec.SecurityTypeID = 2 then (quantity)*(sec.AnnualIncomeRate/100) 
     when sec.SecurityTypeID = 5 then 0 
     when sec.SecurityTypeID = 11 then (quantity)*sec.AnnualIncomeRate  
     else (quantity)*sec.AnnualIncomeRate 
end as caseValue from Transactions) as t 

위의 쿼리는 작동 할 정보가 많지 않으므로 방망이에서 작동하지 않습니다.

A 위의 질문은 왜 쿼리가 내 것보다 훨씬 잘 작동하지 않는지 설명합니다.