Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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/2/sharepoint/4.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 - Fatal编程技术网

SQL-每个日期的总和列

SQL-每个日期的总和列,sql,sql-server,Sql,Sql Server,这似乎是一件很容易的事,但我被卡住了。我有这样一个问题: select op.date, count(p.numberofoutstanding) from people p left join outstandingpunches op on p.fullname = op.fullname group by op.date 它输出如下表: select op.date, count(p.numberofoutstanding) from people p left join outstan

这似乎是一件很容易的事,但我被卡住了。我有这样一个问题:

select op.date, count(p.numberofoutstanding)
from people p
left join outstandingpunches op
on p.fullname = op.fullname
group by op.date
它输出如下表:

select op.date, count(p.numberofoutstanding)
from people p
left join outstandingpunches op
on p.fullname = op.fullname
group by op.date

我如何计算各日期的总和,使每行的总和等于截至该日期的总和?例如,第一列是27,第二列是27+4,第三列是27+4+11,等等


我遇到了一些问题,我看到人们在他们的查询中使用了
而不是
,但是我很困惑我该如何划分。我尝试按日期进行分区,但结果不正确。

您可以使用累积和。这看起来像:

select op.date, count(*),
       sum(count(*)) over (order by op.date) as running_count
from people p join
     outstandingpunches op
     on p.fullname = op.fullname
group by op.date;

注意:我将
连接
左连接
更改为内部连接。您正在按第二个表中的列进行聚合。您的结果没有
NULL
date列的示例,这似乎没有什么用处。因此,似乎假定行是匹配的。

您可以使用累积和。这看起来像:

select op.date, count(*),
       sum(count(*)) over (order by op.date) as running_count
from people p join
     outstandingpunches op
     on p.fullname = op.fullname
group by op.date;

注意:我将
连接
左连接
更改为内部连接。您正在按第二个表中的列进行聚合。您的结果没有
NULL
date列的示例,这似乎没有什么用处。因此,似乎假定行是匹配的。

我认为您需要使用sum而不是count

select o.date_c, 
       sum(sum(p.numberofoutstanding)) over (order by o.date_c)
from people p 
left join outstandingpunches o on p.fullname = o.fullname
group by o.date_c;
下面是一个小演示:


请记住,我已将您的列“日期”重命名为“日期”。我认为您不应该使用数据类型作为列名。

我认为您需要使用sum而不是count

select o.date_c, 
       sum(sum(p.numberofoutstanding)) over (order by o.date_c)
from people p 
left join outstandingpunches o on p.fullname = o.fullname
group by o.date_c;
下面是一个小演示:



请记住,我已将您的列“日期”重命名为“日期”。我认为您不应该使用数据类型作为列名。

如果不需要,您不必使用分区,它是可选的。分区将有效地将记录范围划分为一个窗口子集。如果不需要,您不必使用分区,它是可选的。分区将有效地将记录范围划分为一个窗口子集。嗨@lukaabra,你能告诉我一个计数的和是如何正确的答案吗?谢谢你好如果我使用和的和,我得到的数字比实际情况高得多。我的行有值:71、78、99等等,这是不正确的。那么我的演示呢,tat有什么问题?你能纠正它,并发送给我的链接后,你纠正它,并运行它?哈瓦拉。这是演示:这是正确的小提琴:使用sum of sum给出了一些不可靠的值,我现在明白了。谢谢你好,卢卡布拉,你能告诉我一个数的和是怎样的正确答案吗?谢谢你好如果我使用和的和,我得到的数字比实际情况高得多。我的行有值:71、78、99等等,这是不正确的。那么我的演示呢,tat有什么问题?你能纠正它,并发送给我的链接后,你纠正它,并运行它?哈瓦拉。这是演示:这是正确的小提琴:使用sum of sum给出了一些不可靠的值,我现在明白了。谢谢您需要
前面无边界的行
,以确保结果正确,并且performance@Charlieface . . . 默认值为前一行和当前行之间的
范围
ORDER BY
键是唯一的,因为
GROUP BY
,所以您的评论完全是错误的。是的,在本例中,您使用的是唯一键,但我看到的示例太多了,我会说,这种情况并非如此,我总是出于原则而编写它。性能参数是:据我所知,目前编译器中没有逻辑代码来优化这种情况performance@Charlieface . . . 默认值为前一行和当前行之间的
范围
ORDER BY
键是唯一的,因为
GROUP BY
,所以您的评论完全是错误的。是的,在本例中,您使用的是唯一键,但我看到的示例太多了,我会说,这种情况并非如此,我总是出于原则而编写它。而性能参数是:据我所知,目前编译器中没有逻辑代码来优化这种情况。