Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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/24.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 超过一组的运行总数(2012年前)_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 超过一组的运行总数(2012年前)

Sql 超过一组的运行总数(2012年前),sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,很抱歉再次提起这个话题,我遇到了几个非常相似的有用的现有帖子,但是stackoverflow不允许我在现有帖子上发表评论/问题,因为我是一个新的帖子,分数不到50分 不管怎么说,很多运行总员额是伟大的1组/运行总只。当我引入第二组时,我希望运行总数再次从0开始,它会不断地将它们相加 我已经成功地使用了古怪的更新、带递归的CTE等等。。。但不适用于多个群体 我要寻找的基本输出如下所示: NAME DATE DOLLARS RUNNING John 1/1/2014

很抱歉再次提起这个话题,我遇到了几个非常相似的有用的现有帖子,但是stackoverflow不允许我在现有帖子上发表评论/问题,因为我是一个新的帖子,分数不到50分

不管怎么说,很多运行总员额是伟大的1组/运行总只。当我引入第二组时,我希望运行总数再次从0开始,它会不断地将它们相加

我已经成功地使用了古怪的更新、带递归的CTE等等。。。但不适用于多个群体

我要寻找的基本输出如下所示:

NAME    DATE        DOLLARS     RUNNING
John    1/1/2014    5           5
John    1/2/2014    3           8
John    1/2/2014    4           12
John    1/2/2014    8           20
John    1/3/2014    12          32
Matt    1/1/2014    2           2
Matt    1/2/2014    7           9
Matt    1/3/2014    10          19
select name, date, dollars, sum(dollars) running
from table t
group by name, date, dollars with rollup
我怎样才能做到这一点?先谢谢你

以下是我遇到的一些有用的文章:


可以使用相关子查询执行此操作:

select name, date, dollars,
       (select sum(dollars)
        from table t2
        where t2.name = t.name and
              t2.date <= t.date
       ) as running
from table t;
编辑:

如果在同一日期有多行,则需要引入另一个排序标准。问题中的数据没有其他顺序列,例如id。因此,我们可以创建一个:

with t as (
      select t.*, row_number() over (partition by name order by date) as seqnum
      from table t
     )
select name, date, dollars,
       (select sum(dollars)
        from t t2
        where t2.name = t.name and
              t2.seqnum <= t.seqnum
       ) as running
from t t;

唯一的问题是,日期内的行将是任意顺序的,甚至可能在执行查询之间发生变化。SQL表本质上是无序的,因此您需要一列来指定顺序。

您可以使用相关子查询执行此操作:

select name, date, dollars,
       (select sum(dollars)
        from table t2
        where t2.name = t.name and
              t2.date <= t.date
       ) as running
from table t;
编辑:

如果在同一日期有多行,则需要引入另一个排序标准。问题中的数据没有其他顺序列,例如id。因此,我们可以创建一个:

with t as (
      select t.*, row_number() over (partition by name order by date) as seqnum
      from table t
     )
select name, date, dollars,
       (select sum(dollars)
        from t t2
        where t2.name = t.name and
              t2.seqnum <= t.seqnum
       ) as running
from t t;
唯一的问题是,日期内的行将是任意顺序的,甚至可能在执行查询之间发生变化。SQL表本质上是无序的,因此您需要一列来指定顺序。

您可以使用外部应用:

您可以使用外部应用程序:

您可以像这样使用汇总或多维数据集:

NAME    DATE        DOLLARS     RUNNING
John    1/1/2014    5           5
John    1/2/2014    3           8
John    1/2/2014    4           12
John    1/2/2014    8           20
John    1/3/2014    12          32
Matt    1/1/2014    2           2
Matt    1/2/2014    7           9
Matt    1/3/2014    10          19
select name, date, dollars, sum(dollars) running
from table t
group by name, date, dollars with rollup
您可以像这样使用汇总或多维数据集:

NAME    DATE        DOLLARS     RUNNING
John    1/1/2014    5           5
John    1/2/2014    3           8
John    1/2/2014    4           12
John    1/2/2014    8           20
John    1/3/2014    12          32
Matt    1/1/2014    2           2
Matt    1/2/2014    7           9
Matt    1/3/2014    10          19
select name, date, dollars, sum(dollars) running
from table t
group by name, date, dollars with rollup

我已经编辑了你的标题。请看,如果一致意见是否定的,他们不应该。在你的新问题中,你如何知道同一日期的所有行中哪一行先到?这实际上是一个日期时间,所以我已经按日期时间排序了-谢谢我已经编辑了你的标题。请看,如果共识是否定的,他们不应该。在你的新问题中,你如何知道同一日期的所有行中哪一行先到?这实际上是一个日期时间,所以我已经按日期时间排序了-谢谢,这很有效,但是如果同一日期有多行,它返回该日期组中每行的运行总数。对不起,我已经在上面编辑了我的帖子。对您的查询稍加修改就能得到这些结果吗?另外,如果我要为分组引入另一个专栏,比如公司,我能通过这个来处理吗?非常感谢!!再次感谢您的回复!出于某种原因,这仍然给了我每个日期每行的总天数,例如,2014年1月2日,JOHN在3行的运行列中得到了“20”。这是非常奇怪的行为。t子查询应该有一个在每行上都不同的序列号。如果您有一个id列,则将其添加到order by以使排序按日期、id稳定。多亏了这一点,但是如果同一日期有多行,它会返回该日期组中每行的运行总数。对不起,我已经在上面编辑了我的帖子。对您的查询稍加修改就能得到这些结果吗?另外,如果我要为分组引入另一个专栏,比如公司,我能通过这个来处理吗?非常感谢!!再次感谢您的回复!出于某种原因,这仍然给了我每个日期每行的总天数,例如,2014年1月2日,JOHN在3行的运行列中得到了“20”。这是非常奇怪的行为。t子查询应该有一个在每行上都不同的序列号。如果您有一个id列,那么将其添加到order by,以使排序按日期、id稳定。非常感谢-这给了我我要求的结果,但是上面的查询产生的结果快了一点!再次感谢Hanks-这给了我我想要的结果,但是上面的查询产生的结果快了一点!再次感谢