[英]Sum or count of values based on 2 column with same values in 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 by
和join
來獲得它。
請在此處查看演示。
此外,您的以下計算似乎是錯誤的:
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
你實際上需要窗口函數來實現你想要的。
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.