sql 自定义查询结果字段 使用case when 行列转换
当查询结果没你想要的字段的时候,可以直接添加,字符串或者数值
select XF_NSRMC,'count1' from t_fpgl_jdcfpxx
结果

可以看到,添加字段 count1,会有字段显示 count1,且所有的值也为 count1,值不重要,一般 用于组装数据,把真正需要的数据计算和填充到该字段下,然后返回前端可以很好的解析
使用直接增加字段还可以行列转换功能,自行定义,让然后通过分组使用case when 转行
普通分组 sql
select fpzt,count(fpzt) count from t_fpgl_jdcfpxx GROUP BY fpzt

发现统计是出来了,不过我想把0 1 4 放到列上边,如 0 1 4
3570 240 2 由于map接收数据, 所以格式想要行列转换,这样前端方便解析。
改进:行列转换
select case WHEN fpzt='0' then count(fpzt) else null end '0',
case WHEN fpzt='1' then count(fpzt) else null end '1',
case WHEN fpzt='3' then count(fpzt) else null end '3',
case WHEN fpzt='4' then count(fpzt) else null end '4' ,
count(fpzt) from t_fpgl_jdcfpxx GROUP BY fpzt

可是发现单独占一行,不是想要的,使用case when 设置想要的字段,
最后再次分组,求和
select XF_NSRMC xfmc,sum(f0)zsfs,sum(f1)fsfs,sum(f3)zsfpfs,sum(f4)fsfpfs,bhsj,zzsse,jshj from (
select case WHEN XF_NSRMC is not null then XF_NSRMC else null end 'XF_NSRMC',
case WHEN 0=a.FPZT then (a.count) else 0 end 'f0',
case WHEN 1=a.FPZT then (a.count) else 0 end 'f1',
case WHEN 3=a.FPZT then (a.count) else 0 end 'f3',
case WHEN 4=a.FPZT then (a.count) else 0 end 'f4' ,bhsj,zzsse,JSHJ
from ( select DISTINCT 0,1,3,4,XF_NSRMC ,fpzt,count(fpzt) count,sum(BHSJ) bhsj,sum(ZZSSE)zzsse,sum(jshj)jshj from t_fpgl_jdcfpxx
where SSYF = '202109' GROUP BY XF_NSRMC,fpzt ) a
) b GROUP BY XF_NSRMC
结果图,

JavaScript

浙公网安备 33010602011771号