mysql 8 pivot查询应返回非空值
我希望以下pivot查询显示值0而不是nullmysql 8 pivot查询应返回非空值,mysql,sql,pivot,aggregate-functions,mysql-8.0,Mysql,Sql,Pivot,Aggregate Functions,Mysql 8.0,我希望以下pivot查询显示值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.categ
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
我认为没有必要在还款
案例中进行第二次分支。如果类别不可用时需要0
,只需else 0
:
SELECT
employeeId,
Id,
MAX(CASE WHEN category = 'Repayment' THEN value ELSE 0 END) as Repayment,
MAX(CASE WHEN category = 'Salary' THEN value ELSE 0 END) as Salary,
MAX(CASE WHEN category = 'Allowance' THEN value ELSE 0 END) as Allowance
FROM payData pi
GROUP BY employeeId, Id;
注:
- 不要对标识符使用单引号!它们应仅用于文本字符串,如ANSI SQL中所指定,并且在所有数据库中都受支持
- 您有一个单表查询,因此不必在所有列名前加前缀
您能提供小提琴真是太好了。但是,这个问题应该是完整的,没有可能随着时间的推移而消失的外部参照。请在问题本身中包含创建
和插入
语句。那么小提琴是一个不错的奖励。你为什么要注释掉——否则0
?我错过什么了吗?如果你取消注释,它会给你想要的。(当isnull(pi.category)=1时,您可以删除,然后删除0
)参见关于COALESCE()@stickybit这是最奇怪的事情,如果我取消注释,否则0预付款类别不会显示在mysql developer上。与我知道的工具无关,但我猜与数据有关。我想知道那是什么。