繁体   English   中英

SQL Server 同一列中特定值的总和

[英]Sum of specific values in same column SQL Server

ID Date       Zone  Group destination  start            end                    sec     step   unit
--------------------------------------------------------------------------------------------
1  2020-01-25 Zone1 GP1   D1         2020-01-25 08:18   2020-01-25 08:22       240      E      18
1  2020-01-25 Zone2 GP2   D1         2020-01-25 08:22   2020-01-25 08:23       70       N1     22
1  2020-01-25 Zone1 GP1   D1         2020-01-25 16:08   2020-01-25 16:58       3037     N2     25
1  2020-01-25 Zone3 GP3   D1         2020-01-25 14:18   2020-01-25 14:22        198      P      50
1  2020-01-25 Zone4 GP4   D1         2020-01-25 20:04   2020-01-25 20:09        283      D      55
1  2020-01-25 Zone3 GP3   D1         2020-01-25 08:18  2020-01-25 08:22         740      E      22
1  2020-03-10 Zone4 GP4   D1         2020-03-10 16:35  2020-03-10 16:43         459      E      789
1  2020-03-10 Zone4 GP4   D1         2020-03-10 10:43 2020-03-10 10:57          853      E      289
2  2020-03-13 Zone1 GP1   D1         2020-03-13 08:08 2020-03-13 08:11          201      N      555 
2  2020-03-13 Zone2 Gp2   D1         2020-03-13 06:27 2020-03-13 06:40          767      E      789
2  2020-03-13 Zone3 GP3   D1         2020-03-13 21:02 2020-03-13 21:09          409      E      552
2  2020-03-13 Zone4 GP4   D1         2020-03-13 21:09 2020-03-13 21:10          78       E      253

以上是我需要 sum_of_individual_time 和 Sum of Total time 的示例数据

需要使用以下公式进行查询。

总时间总和是指每天的秒值总和

sum_of_individual_time 秒的总和,其中 step='E' 每天

sum_of_individual_time (step=E) for 2020-01-25 of ID 1 =240+740=980

sum_of_individual_time (step=E) for 2020-03-10 of Id 1 = 459+853=1312

sum_of_individual_time (step=E) for 2020-03-13 of Id 2 = 789+552+253=1594

Id 1 的 2020-01-25 的总时间(所有步骤)总和 =240+70+3037+198+283+740=4568

日期 2020-03-10 = 1312 的 Id 1 的总时间(所有步骤)的总和

日期 2020-03-10 = 1312 的 Id 1 的 sum_of_individual_time(步骤 = E)

日期 2020-03-13 的 Id 2 的总时间(所有步骤)总和 = 555+789+552+253=2149

输出

ID Date Zone Group destination start end    sec     step   unit  sum of individual time   Sum of total
1  2020-01-25 Zone1 GP1 D1  2020-01-25 08:18 2020-01-25 08:22 240  E 18  980 4568
1  2020-01-25 Zone2 GP2 D1 2020-01-25 08:22 2020-01-25 08:23 70   N1 22   NULL  4568
1  2020-01-25 Zone1 GP1 D1 2020-01-25 16:08 2020-01-25 16:58 3037 N2 25   NULL  4568
1  2020-01-25 Zone3 GP3  D1 2020-01-25 14:18 2020-01-25 14:22 198  P  50  NULL  4568

1  2020-01-25 Zone4 GP4 D1  2020-01-25 20:04 2020-01-25 20:09 283   D   55   NULL  4568
1  2020-01-25 Zone3 GP3 D1 2020-01-25 08:18 2020-01-25 08:22 740 E  22  980   4568
1  2020-03-10 Zone4  GP4  D1 2020-03-10 16:35 2020-03-10 16:43  459  E  789  1312  1312
1  2020-03-10 Zone4 GP4  D1 2020-03-10 10:43 2020-03-10 10:57 853  E    289  1312   1312
2  2020-03-13 Zone1 GP1 D1 2020-03-13 08:08 2020-03-13 08:11 201 N    555    NULL  2149
2  2020-03-13 Zone2  Gp2   D1  2020-03-13 06:27 2020-03-13 06:40  767  E  789  1594  2149
2  2020-03-13 Zone3  GP3  D1 2020-03-13 21:02 2020-03-13 21:09 409 E   552  1594   2149
2  2020-03-13 Zone4 GP4  D1 2020-03-13 21:09  2020-03-13 21:10  78  E   253   1594  2149

您也可以通过使用group byjoin来获得它。

请在此处查看演示。

此外,您的以下计算似乎是错误的:

sum_of_individual_time (step=E) for 2020-03-13 of Id 2 = 789+552+253=1594

日期 2020-03-13 的 Id 2 的总时间(所有步骤)的总和 = 555+789+552+253=2149

它应该是

sum_of_individual_time (step=E) for 2020-03-13 of Id 2 = 767+409+78=1254

日期 2020-03-13 的 Id 2 的总时间(所有步骤)的总和 = 201+767+409+78=1455

使用GROUP BY语句和SUM函数。

GROUP BY 文档在这里

SUM 文档在这里

你实际上需要窗口函数来实现你想要的。

SELECT ID,Date,Zone,[Group],destination,[start],[end],sec,step,unit
,CASE WHEN step='E' THEN SUM(CASE WHEN step='E' THEN sec ELSE 0 END )OVER (PARTITION BY Date ORDER BY ID ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ELSE NULL END as [Sum of individual time ]
,SUM(sec) OVER (PARTITION BY Date ORDER BY ID ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as [Sum of total]
From Test

在您的示例中,您犯了一个错误:

“日期 2020-03-13 的 Id 2 的总时间(所有步骤)总和 = 55+789+552+253=2149” - 在这里您求和的单位不是秒。

您可以通过查看 PARTITION BY Date 的分区来判断这是对一天的总和。

如果你想玩它,这里是 SQL 小提琴: http : //sqlfiddle.com/#!18/125d2/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM