表数据如下所示
id val
[1]1 4
2 2
3 1
我想要一个sql语句中val字段减去值的结果。类似于4-2-1 =1,如果由id asc排序,则为1-2-4 = -5,如果按id desc排序的话。
发布于 2009-12-21 08:46:29
您可以声明一个变量并在select语句中增加它:
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。
发布于 2009-12-21 08:39:54
你可以试试这个
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发布于 2009-12-21 09:08:03
如果只使用没有临时表或变量的sql:
选择fromid.val - sumid.val
来自(
选择val
从t
其中id =(
select min(id)
from t
))交叉连接(
select sum(val) as val
from t
where id > (
select min(id)
from t
))总合
https://stackoverflow.com/questions/1938897
复制相似问题