首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数据中减去所有值

从数据中减去所有值
EN

Stack Overflow用户
提问于 2009-12-21 08:35:53
回答 3查看 212关注 0票数 0

表数据如下所示

id val

[1]1 4

2 2

3 1

我想要一个sql语句中val字段减去值的结果。类似于4-2-1 =1,如果由id asc排序,则为1-2-4 = -5,如果按id desc排序的话。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-21 08:46:29

您可以声明一个变量并在select语句中增加它:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2009-12-21 08:39:54

你可以试试这个

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2009-12-21 09:08:03

如果只使用没有临时表或变量的sql:

选择fromid.val - sumid.val

来自(

选择val

从t

其中id =(

代码语言:javascript
复制
    select min(id)

    from t

  )

)交叉连接(

代码语言:javascript
复制
select sum(val) as val

from t

where id > (

      select min(id)

      from t

    )

)总合

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1938897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档