sql 服务器聚合函数(求和)
sql server aggregate function(sum)
假设我有一个 table 这样的
| Person_ID | DATE | STATUS | HOURS |
----------------------------------------------------
| 001 | April 3 | OK | 3.000 |
| 001 | April 4 | BAD | 3.000 |
| 001 | April 3 | BAD | 4.000 |
| 002 | April 3 | OK | 2.000 |
| 002 | April 5 | BAD | 3.000 |
我想实现这样的目标..
| Person_ID | TOTAL(OK) | TOTAL(BAD) | OVERALL(OK+BAD)|
------------------------------------------------------------
| 001 | 3.000 | 7.000 | 10.000 |
| 002 | 2.000 | 3.000 | 5.000 |
我以前做过类似的事情,但仅限于个人Person_ID
。
在这种情况下,我已经尝试 grouping
并使用 sum
但它实际上不是目标结果,因为我无法将相同的 Person_ID
分组为上面的结果。
我实际上可以实现这一点,但有多个 api 请求,但我认为这不是一个好习惯。我只想要一个请求。
抱歉英语不好:)
在 SUM()
函数中使用 CASE
语句尝试以下操作。
select
Person_Id,
sum(case when status = 'OK' then hours end) as `TOTAL(OK)`,
sum(case when status = 'BAD' then hours end) as `TOTAL(BAD)`.
sum(case when status = 'OK' OR status = 'BAD' then hours end) as `TOTAL(OK + BAD)`
from yourTable
group by
Person_Id
假设我有一个 table 这样的
| Person_ID | DATE | STATUS | HOURS |
----------------------------------------------------
| 001 | April 3 | OK | 3.000 |
| 001 | April 4 | BAD | 3.000 |
| 001 | April 3 | BAD | 4.000 |
| 002 | April 3 | OK | 2.000 |
| 002 | April 5 | BAD | 3.000 |
我想实现这样的目标..
| Person_ID | TOTAL(OK) | TOTAL(BAD) | OVERALL(OK+BAD)|
------------------------------------------------------------
| 001 | 3.000 | 7.000 | 10.000 |
| 002 | 2.000 | 3.000 | 5.000 |
我以前做过类似的事情,但仅限于个人Person_ID
。
在这种情况下,我已经尝试 grouping
并使用 sum
但它实际上不是目标结果,因为我无法将相同的 Person_ID
分组为上面的结果。
我实际上可以实现这一点,但有多个 api 请求,但我认为这不是一个好习惯。我只想要一个请求。
抱歉英语不好:)
在 SUM()
函数中使用 CASE
语句尝试以下操作。
select
Person_Id,
sum(case when status = 'OK' then hours end) as `TOTAL(OK)`,
sum(case when status = 'BAD' then hours end) as `TOTAL(BAD)`.
sum(case when status = 'OK' OR status = 'BAD' then hours end) as `TOTAL(OK + BAD)`
from yourTable
group by
Person_Id