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 

结果图,

 

posted @ 2021-09-26 10:20  幻樱落日剑  阅读(646)  评论(0)    收藏  举报