2010-02-10 7 views
2

T-SQL에서 계산을 수행하려고하는데 문제가 있습니다. T-SQL : 총 값을 계산하는 방법

DECLARE @CNT money 
SELECT @CNT = 0 

Select Amount, 
     case 
      when Service like 'pay_in' then SET @CNT = @CNT + Amount 
      when Service like 'pay_out' then SET @CNT= @CNT - Amount 
     end 
    from Payment where isActive = 1 

select @CNT 

인해 T-SQL 구문 내가 여기에 붙어있어 내 빈약 한 지식, 누군가가 올바른 방향으로 날 밀어 수 있다면 매우 감사 할 것 : 여기 내가 할 노력하고있어 것입니다. 고맙습니다!

+2

변수 이름을 @CNT가 아닌 @Total로 지정하는 것이 좋습니다. – shahkalpesh

답변

5

SQL은 세트 기반의 접근 방식에 가장 잘 작동합니다. 데이터 세트를 반복하여 문제를 해결하지 말고 데이터를 집계하여보십시오.

DECLARE @CNT money 

SELECT 
    @CNT = SUM(
    CASE Service 
     WHEN 'pay_in' THEN Amount 
     WHEN 'pay_out' THEN -1 * Amount 
     ELSE 0 
    END 
) 
FROM 
    Payment 
WHERE 
    isActive = 1 

SELECT @CNT 
4

당신은 변수를 사용하지 않고 그것을 더 단순화 할 수 있습니다하십시오 SELECT 내부 SET에 대한 필요가 없습니다

Select Sum(Case Service 
      When 'pay_in' Then Amount 
      When 'pay_out' Then -Amount 
      End) as Total 
From Payment 
Where isActive = 1 
1

. 변수없이,

set @CNT = 0 

select 
    @CNT = case 
     when Service like 'pay_in' then @CNT + Amount 
     when Service like 'pay_out' then @CNT - Amount 
    end 
from Payment 
where isActive = 1 

을 또는 : : 시도

Select 
    sum(case 
     when Service like 'pay_in' then Amount 
     when Service like 'pay_out' then -Amount 
    end) as Total 
from Payment 
where isActive = 1 
+0

게시하기 전에 첫 번째 제안을 실제로 시도해 보셨습니까? –

+0

@Frank Kalis : 아니, 나는 그것을 시도하지 않았다. 그것을 다시 읽을 때 같은 질의에서 amount를 선택하고 @cnt에 대입 할 수 없으므로 @cnt를 초기화해야합니다. – Andomar

+0

@CNT를 초기화 할 필요는 없지만 하나의 SELECT 문에서 데이터 검색과 변수 할당을 동시에 수행 할 수는 없습니다. :-) –

관련 문제