关键查询mysql中的条件分组

问题描述

我的架构看起来像,

CREATE TABLE `test` (
  `Id` int(11) NOT NULL,`CategoryName` varchar(45) DEFAULT NULL,`type` varchar(40) DEFAULT NULL,`value` decimal(15,4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


INSERT INTO `test`
(`Id`,`CategoryName`,`type`,`value`)
VALUES
(1,'Allowance','ADDITION',4000),(1,'Salary',1500),'Telephone',200),'Other',500),'Fine','DEDUCTION','Other Deduction','Salary Deduction',100),(2,300),1300)
;

要求显示汇总的某些类别,而其他类别则按原样显示在这种情况下,工资和津贴将显示在各自的列中,而任何其他加法类型将被汇总。同样适用于扣除类型。

select Id,MAX(CASE
        WHEN CategoryName = 'Salary' THEN pi.value
        ELSE 0
    END) AS 'Salary',MAX(CASE
        WHEN CategoryName = 'Allowance' THEN pi.value
        ELSE 0
    END) AS 'Allowance',MAX(CASE when pi.type = 'ADDITION' THEN
    CASE
        WHEN CategoryName not in ('Salary','Allowance') THEN pi.value -- sum(pi.value)
        ELSE 0
        END
    END) AS 'Other Allowances',MAX(case WHEN CategoryName = 'Fine' THEN pi.value -- sum(pi.value)
        ELSE 0            
    END) AS 'Fine',MAX(CASE when pi.type = 'DEDUCTION' THEN
    CASE
        WHEN CategoryName not in ( 'Fine') THEN pi.value -- sum(pi.value)
        ELSE 0
        END
    END) AS 'Other Deductions' 
     from  test pi group by Id;

现在,当我输入 sum(pi.value) 时,我收到错误 错误代码:1111。组函数的使用无效。如果没有 sum 函数,max 仅返回最大值并忽略其余部分,如 Telephone 加法,这是预期的。

Id  Salary      Allowance   Other Allowances    Fine     Other Deductions
1   1500.0000   4000.0000    500.0000          500.0000    500.0000
2   300.0000    0.0000       1300.0000          0.0000      *null*

因此,id 1 的 Other Allowance 列应显示 700,即 500(其他)+ 200(电话)

在这种情况下,在使用数据透视查询获取总和的正确方法是什么?

dbfiddle

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)