• ADADADADAD

    Excel中怎么实现动态行转列[ mysql数据库 ]

    mysql数据库 时间:2024-11-28 13:24:31

    作者:文/会员上传

    简介:

    查询的SQL如下<ol start="1" class="dp-sql" white-space:normal;">selecttype,ts,cn,asDECIMAL)valfrom(selectstarttime,&#39;发布&#39;type,base.ts,base.cn,ifnull(t1.v

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。


    查询的SQL如下
    <ol start="1" class="dp-sql" white-space:normal;">

      selecttype,ts,cn,asDECIMAL)valfrom(

      select

      starttime,'发布'type,base.ts,base.cn,ifnull(t1.val,0)val

      from

      (

      select

      t1.*,

      startdate+intervalid-1hourstarttime,

      startdate+intervalidhourendtime,

      date_format(startdate+intervalid-1hour,'%m%d%H')ts,

      vars.*

      fromnums,(select${starttime}startdate,${endtime}enddate)vars,

      (

      select'mvbox_user.user_otherinfo'busidatatype,1type,'内容审核.个人资料'cnunionall

      select'mvbox_user.user_baseinfo',1,'内容审核.个人喜好'unionall

      select'photo_album',1,'内容审核.相册信息'unionall

      select'photo_list',1,'内容审核.图片信息'unionall

      select'music_original',1,'内容审核.原唱信息'unionall

      select'music_cover',1,'内容审核.翻唱信息'unionall

      select'music_accompany',1,'内容审核.伴奏信息'unionall

      select'music_album',1,'内容审核.音乐专辑'unionall

      select'music_video',1,'内容审核.视频信息'unionall

      select'blog_album',1,'内容审核.日志与文章'unionall

      select'mvbox_user.user_baseinfo',2,'内容审核.MVBOX头像审核'

      )t1

      whereid<=TIMESTAMPDIFF(hour,startdate,enddate)

      orderbybusidatatype,type,starttime

      )basejoin

      (

      selectbusidatatype,type,date_format(createtime,'%m%d%H')ts,fromaudit_obj_detail

      wherecreatetime>=${starttime}andcreatetime<${endtime}

      andbusitype='mvbox'

      groupbybusidatatype,type,date_format(createtime,'%m%d%H')

      )t1on(base.busidatatype=t1.busidatatypeandbase.type=t1.typeandbase.ts=t1.ts)

      groupbybase.busidatatype,base.type,base.ts,base.cn

      unionall

      select

      starttime,'审核'type,base.ts,base.cn,ifnull(t1.val,0)val

      from

      (

      select

      t1.*,

      startdate+intervalid-1hourstarttime,

      startdate+intervalidhourendtime,

      date_format(startdate+intervalid-1hour,'%m%d%H')ts,

      vars.*

      fromnums,(select${starttime}startdate,${endtime}enddate)vars,

      (

      select'mvbox_user.user_otherinfo'busidatatype,1type,'内容审核.个人资料'cnunionall

      select'mvbox_user.user_baseinfo',1,'内容审核.个人喜好'unionall

      select'photo_album',1,'内容审核.相册信息'unionall

      select'photo_list',1,'内容审核.图片信息'unionall

      select'music_original',1,'内容审核.原唱信息'unionall

      select'music_cover',1,'内容审核.翻唱信息'unionall

      select'music_accompany',1,'内容审核.伴奏信息'unionall

      select'music_album',1,'内容审核.音乐专辑'unionall

      select'music_video',1,'内容审核.视频信息'unionall

      select'blog_album',1,'内容审核.日志与文章'unionall

      select'mvbox_user.user_baseinfo',2,'内容审核.MVBOX头像审核'

      )t1

      whereid<=TIMESTAMPDIFF(hour,startdate,enddate)

      orderbybusidatatype,type,starttime

      )basejoin

      (

      selectbusidatatype,type,date_format(AuditTime,'%m%d%H')ts,fromaudit_obj_detail

      whereAuditTime>=${starttime}andAuditTime<${endtime}

      andbusitype='mvbox'

      groupbybusidatatype,type,date_format(AuditTime,'%m%d%H')

      )t1on(base.busidatatype=t1.busidatatypeandbase.type=t1.typeandbase.ts=t1.ts)

      groupbybase.busidatatype,base.type,base.ts,base.cn

      )t1;


      由于这个SQL已然比较复杂,再加动态行转列,可读性几乎就没有了.


      这个SQL查询的结果大致如下。



      其中type可能是发布或者审核.


      ts 表示月 日 和小时


      cn表示模块类型


      val表示数量.



      将这个结果导入至Excel


      选择插入,数据透视表




      然后将ts 设置为列标签,这样 ts 就由行变成列显示


      cn和type作为行标签.


      val作为显示数值




      然后选择视图->冻结窗格->冻结首列 方便观看数据



      可以看到如下结果




      完全符合动态行转列的需求,并且可以排序和筛选.太强大了.

    Excel中怎么实现动态行转列.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: excel