首页 > 解决方案 > 不同和的总和

问题描述

你好社区,

我在组合 3 个不同求和查询的值时遇到问题。我们有一个包含几列的表,例如:customer_id, amount_hours, start_date, end_date, one_time

有3个不同的类别/条件来总结它们。

  1. one_time 是真的

  2. end_date 为 NULL 并且 one_time 为 false

  3. end_date 不为 NULL 且 one_time 为 false

我完成了这 3 个查询。他们完美地工作。现在,我当然想将结果添加到 customer_id 旁边的单个列中。表格代表的是“空闲时间”的数量(对不起,英语不是我的母语,我想不出更好的表达方式)。客户要么购买了一定数量的一次性付款,要么签订了一份每月增加 X 小时数量的合同。

假设客户随机商店购买了 20 小时作为一次性付款,去年全年支付了每月 5 小时,而在今年将其更改为每月 8 小时。那么它需要总和 20 + (12months * 5 hours = 60) + (8months {现在是八月} * 8 hours = 64) = 144。

到目前为止,我得到了 3 个查询来获得 20、60 和 64。但是如果我尝试类似的东西select sum ((select sum(....)+select sum(....)+select sum(....)),那么它就不起作用了。我得到了语法错误,我感觉我正在尝试一些不正确的语法结构应该是什么样子的东西,添加了三个不同的求和查询。尝试谷歌搜索它,没有运气。有人可以帮忙吗?

第一个总和:

select sum (amount_hours) from [myTable] where customer_id=100112 AND one_time= 'True'

第二个总和:

select sum ((datediff(month, Start_Date, End_Date)+1)* amount_hours) from [myTable] where customer_id = 100112 AND one_time = 'False' and end_date is not NULL

第三次总和:

select sum ((datediff(month, Start_Date, Getdate())+1) * amount_hours) from [myTable] where customer_id = 100112 AND one_time = 'False' and end_date is NULL

我的样本故意包含一个 customer_id。以后会没有他们和一群人。

标签: mysqlsql

解决方案


1.one_time 为真

2.end_date 为 NULL 且 one_time 为 false

3.end_date不为NULL且one_time为false

没问题。

SELECT customer_id, 
       SUM(CASE WHEN one_time = 'True'
                THEN amount_hours 
                END) sum1,
       SUM(CASE WHEN end_date IS NULL and one_time = 'False'
                THEN (DATEDIFF(MONTH, Start_Date, End_Date) + 1) * amount_hours 
                END) sum2,
       SUM(CASE WHEN end_date IS NOT NULL and one_time = 'False'
                THEN (DATEDIFF(MONTH, Start_Date, Getdate()) + 1) * amount_hours
                END) sum3
FROM myTable
GROUP BY customer_id

如果需要,您可以添加ELSE 0到 CASE。


推荐阅读