这篇文章将为大家详细讲解有关Excel中怎么实现动态行转列,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。


查询的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中怎么实现动态行转列就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。