【发布时间】:2021-04-05 00:52:30
【问题描述】:
我希望以下数据透视查询显示值 0 而不是 null,
SELECT
pi.employeeId,
pi.Id,
MAX(CASE
WHEN pi.category = 'Repayment' THEN pi.value
WHEN isnull(pi.category) = 1 then 0
-- ELSE 0
END) as 'Repayment',
MAX(CASE
WHEN pi.category = 'Salary' THEN pi.value
ELSE 0
END) as 'Salary',
MAX(CASE
WHEN pi.category = 'Allowance' THEN pi.value
ELSE 0
END) as 'Allowance'
FROM
payData pi
GROUP BY pi.employeeId , pi.Id ;
上面的输出是,
employeeId Id Repayment Salary Allowance
121 2 2000 15000 1000
122 2 null 20000 2000
员工 id 122 没有 还款 值,因此所需的输出是,
employeeId Id Repayment Salary Allowance
121 2 2000 15000 1000
122 2 0 20000 2000
【问题讨论】:
-
很高兴你能提供一个小提琴。但是这个问题应该是完整的,没有外部参考,外部参考可能会随着时间的推移而消失。请在问题本身中包含
CREATE和INSERT语句。那么小提琴是一个不错的奖励。 -
你为什么把
-- ELSE 0注释掉了?我错过了什么吗?如果你取消注释,它会给你你想要的。 (不过你可以删除WHEN isnull(pi.category) = 1 then 0) -
了解 COALESCE()
-
@stickybit 这是最奇怪的事情,如果我取消注释 - 否则 0 预付款类别不会显示在 mysql 开发人员上。与我知道的工具无关,但我猜测与数据有关。我试图找出那是什么。
标签: mysql sql pivot aggregate-functions mysql-8.0