问题描述
我的架构看起来像,
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(电话)
在这种情况下,在使用数据透视查询时获取总和的正确方法是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)