我知道,标题可能会让人困惑,我写了它,甚至我不确定它真的意味着什么,我想让我忍受。。。
以下是我的表中几个记录的结果(我们称之为费用):
ID employee_name amountA amountB valueA value B billing_date
1 Luc 0.15 5.00 0 0 2018-02-06
2 Luc 0.00 2.85 0 0 2018-02-06
3 Luc 0.00 3.15 0 1 2018-02-06
4 Anny 15.00 0.00 1 0 2018-02-06
5 Anny 0.00 0.35 0 0 2018-02-06
6 Anny 10.25 0.00 0 0 2018-02-06
我想要的是一个select语句,如果valuea和valueb都等于0,它将返回这个(上面)添加的新列,即sum(amounta)+sum(amountb)。因此:
ID employee_name amountA amountB valueA value B billing_date total
1 Luc 0.15 5.00 0 0 2018-02-06 8.00
2 Luc 0.00 2.85 0 0 2018-02-06 8.00
3 Luc 0.00 3.15 0 1 2018-02-06 8.00
4 Anny 15.00 0.00 1 0 2018-02-06 10.60
5 Anny 0.00 0.35 0 0 2018-02-06 10.60
6 Anny 10.25 0.00 0 0 2018-02-06 10.60
如您所见,日期范围也必须考虑在内。我读过很多关于这个的帖子,如果我只希望每个员工有一条记录,加上“总计”一栏,那该怎么做,但我似乎无法生成上面的内容。
都在同一个数据库中。到目前为止,我的sql语句是这样的(基于下面的gordon linoff帮助):
select c.*,
(select sum(c2.amountA) + sum(c2.amountB)
from charges c2
where c2.employee_name = c.employee_name and c2.valueA = 0 and c2.valueB = 0 and c2.billing_date <= '2018-02-06' and c2.billing_date >= '2018-02-06'
) as total from charges c WHERE employee_name LIKE '%' and c.billing_date <= '2018-02-06' and c.billing_date >= '2018-02-06'
order BY `c`.`employee_name` ASC
现在这已经接近我想要的了,最后一个问题是,如果在某个日期范围内,我没有得到某个特定员工的姓名(因此结果应该是0.00),那么我会得到null,如下所示:
ID employee_name amountA amountB valueA value B billing_date total
1 Luc 0.15 5.00 1 0 2018-02-06 NULL
2 Luc 0.00 2.85 1 0 2018-02-06 NULL
3 Luc 0.00 3.15 0 1 2018-02-06 NULL
4 Anny 15.00 0.00 1 0 2018-02-06 10.60
5 Anny 0.00 0.35 0 0 2018-02-06 10.60
6 Anny 10.25 0.00 0 0 2018-02-06 10.60
有没有一种方法可以预先定义“total”为零,或者有某种条件应用于“total”,如果为空,则显示0?
3条答案
按热度按时间5ssjco0h1#
一种方法使用相关子查询:
编辑:
如果你不想
NULL
,只需使用coalesce()
:1sbrub3j2#
您可以加入total的子查询
ct2axkht3#
最后,使用coalesce解决了我的最后一个问题:
谢谢大家!!!