CREATE TABLE `t_energy_statistic` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
`invoiceEntryTime` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '时间',
`degree` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '度数',
`amount` decimal(12,2) DEFAULT NULL COMMENT '金额',
`tax` decimal(12,2) DEFAULT NULL COMMENT '税额',
`totalAmount` decimal(12,2) DEFAULT NULL COMMENT '总金额',
`setUpCompanyId` int DEFAULT NULL COMMENT '开出公司',
`receCompanyId` int DEFAULT NULL COMMENT '收到公司'
`PRIMARY KEY (`id`) USING BTREE`
) ENGINE=MyISAM AUTO_INCREMENT=45 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='能耗统计表';
现在有一张能源统计表,总度数显示收到公司的各个月份的度数合计,A、B、C公司分别代表开出公司各个月份的度数合计,现在想实现EXCE表格那种效果,如上截图。用sql查询怎么实现?我尝试使用GROUP_CONCAT函数分割和SUBSTRING_INDEX多字符串行转列实现,但是遇到一个问题,degree个别时候长度不一致,我没办法区分A公司1月份合计开出多少度,最终的需求是想实现,收到公司度数的合计,和收到公司分别是由哪几个公司开出的度各月汇总度数。
--如下是我写是sql,由于3月份有多条数据,拆分的时候只拆分了两条,其实应该对应两家各有一条合计数degree1和degree2,然后degree1+degree2=degree
SELECT invoiceEntryTime invoiceentrytime,meterDate meterdate,sum(degree) degree,
(select SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(degree),',',1),',',-1)) as degree1,
(select SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(degree),',',2),',',-1)) as degree2
FROM t_energy_statistic AS A where 1=1 and receCompanyId in ( '2' , '30' ) and invoiceEntryTime in ( '2023-01' , '2023-02' , '2023-03' ) GROUP BY A.invoiceEntryTime ORDER BY A.invoiceEntryTime;