Вычесть все значения из данных - PullRequest
0 голосов
/ 21 декабря 2009

Данные таблицы выглядят так

id val
1 4
2 2
3 1

Я хочу получить результат вычитания значения поля val в одном выражении sql. как это должно быть похоже на 4-2-1 = 1, если порядок по id asc, 1-2-4 = -5, если порядок по id desc .

Ответы [ 3 ]

2 голосов
/ 21 декабря 2009

Вы можете попробовать это

DECLARE @Table TABLE(
        ID INT,
        Val INT
)

INSERT INTO @Table (ID,Val) SELECT 1, 4
INSERT INTO @Table (ID,Val) SELECT 2, 2
INSERT INTO @Table (ID,Val) SELECT 3, 1

SELECT  SUM(Val * CASE WHEN RowID = 1 THEN 1 ELSE -1 END)
FROM    (
            SELECT  *,
                    ROW_NUMBER() OVER (ORDER BY ID) RowID
            FROM    @Table
        ) sub
1 голос
/ 21 декабря 2009

, если вы хотите использовать только sql без временных таблиц или переменных:

выберите из id.val - sumid.val

от (

выберите значение

от т

где id = (

    select min(id)

    from t

  )

) перекрестное соединение fromid (

select sum(val) as val

from t

where id > (

      select min(id)

      from t

    )

) сумма

1 голос
/ 21 декабря 2009

Вы можете объявить переменную и увеличить ее в операторе выбора:

declare @sum float

select @sum = case when @sum is null then value else @sum - value end
from YourTable
order by id

select @sum

Чтобы изменить порядок вычитания, измените order by id на order by id desc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...