Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql 8 pivot查询应返回非空值_Mysql_Sql_Pivot_Aggregate Functions_Mysql 8.0 - Fatal编程技术网

mysql 8 pivot查询应返回非空值

mysql 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

我希望以下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.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上。与我知道的工具无关,但我猜与数据有关。我想知道那是什么。