T-SQL: как рассчитать общий итог значений - PullRequest
2 голосов
/ 10 февраля 2010

Я пытаюсь выполнить вычисления в 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 я застрял здесь и был бы очень благодарен, если бы кто-то мог подтолкнуть меня в правильном направлении. Спасибо!

Ответы [ 3 ]

5 голосов
/ 10 февраля 2010

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 голосов
/ 10 февраля 2010

Вы можете упростить его, не используя переменные:

Select Sum(Case Service
           When 'pay_in' Then Amount
           When 'pay_out' Then -Amount
           End) as Total
From Payment 
Where isActive = 1
1 голос
/ 10 февраля 2010

Нет необходимости в SET внутри SELECT. Попробуйте:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...