Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql运行完全修改_Sql_Sql Server_Tsql - Fatal编程技术网

sql运行完全修改

sql运行完全修改,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个带有列的表:ID,输入'IN'和'Out'字符串,以及值持有货币数据 我需要按照逻辑,通过求和和和减去值来获得每行的平衡: 如果类型='In',则求和值 如果Type='Out',则为负值 我尝试过一些东西,但我无法确定在哪里有进或出: ID Type Value and in balance like this Balance 21 In 55 55 22 IN 78

我有一个带有列的表:ID,输入'IN'和'Out'字符串,以及值持有货币数据

我需要按照逻辑,通过求和和和减去值来获得每行的平衡:

如果类型='In',则求和值 如果Type='Out',则为负值 我尝试过一些东西,但我无法确定在哪里有进或出:

ID  Type      Value  and in balance like this Balance
21  In        55                              55
22  IN        78                              133
23  Out       15                              118
24  Out       56                              62
25  In        72                              134
26  Out       5                               129
我有这样的代码:

SELECT  ID ,
        Value ,
        ( SELECT    SUM(y.Value)
          FROM      dbo.Reestr y
          WHERE     y.ID <= x.ID

        ) AS RunningTotal
FROM    dbo.Reestr x
ORDER BY 1 ,2 ,3;

只需使用累积和函数。这在SQL Server 2012+中可用:

select r.id, r.value,
       sum(case when r.type = 'in' then value
                when r.type = 'out' then - value
           end) over (order by r.id) as balance
from dbo.Reestr r
ORDER BY 1, 2, 3;

通过在子查询中包含大小写表达式,可以对相关子查询执行相同的操作。

只需使用累积和函数即可。这在SQL Server 2012+中可用:

select r.id, r.value,
       sum(case when r.type = 'in' then value
                when r.type = 'out' then - value
           end) over (order by r.id) as balance
from dbo.Reestr r
ORDER BY 1, 2, 3;
通过在子查询中包含大小写表达式,可以对相关子查询执行相同的操作。

试试这个

SELECT  ID ,
            Value ,
            (select sum(case when Type = 'IN' then Value 
                             when Type='OUT' then (0-value) end) 
             FROM dbo.Reestr y where x.Id>=y.id) AS RunningTotal
    FROM    dbo.Reestr x
    ORDER BY 1 ,2 ,3;
试试这个

SELECT  ID ,
            Value ,
            (select sum(case when Type = 'IN' then Value 
                             when Type='OUT' then (0-value) end) 
             FROM dbo.Reestr y where x.Id>=y.id) AS RunningTotal
    FROM    dbo.Reestr x
    ORDER BY 1 ,2 ,3;

@拉维。问题中的代码没有分组依据。数据也没有表明需要这样做。如果您对聚合的累积和有疑问,请提问。@Gordon Linoff…您使用的是聚合函数,您必须使用group by子句,因为聚合函数中没有Id。若问题不存在,那个么这就是为什么他并没有得到想要的结果,@Ravi。这是一个窗口函数。我认为你需要更好地学习SQL。@Ravi。问题中的代码没有分组依据。数据也没有表明需要这样做。如果您对聚合的累积和有疑问,请提问。@Gordon Linoff…您使用的是聚合函数,您必须使用group by子句,因为聚合函数中没有Id。若问题不存在,那个么这就是为什么他并没有得到想要的结果,@Ravi。这是一个窗口函数。我认为您需要更好地学习SQL。