设为首页 加入收藏

TOP

行列转换的另一种形式
2014-11-24 07:58:02 来源: 作者: 【 】 浏览:2
Tags:行列 转换 形式

在实际做项目的时候遇到这样一个问题:数据库表里存储了每个火车站每种类型的火车票销售数量,但是有的火车站可能不销售动车票或者高铁票,最终的结果要如图2所示,不销售类型的火车票就空出来。本文采用master.dbo.spt_values动态生成最大数目的列头,然后采用case when实现每种类型的火车票进行统计。

原始表 dc

\

图1
< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+xtrN+7XDtb21xMr9vt294bn7PC9wPgo8cD48aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/57/1_wl1k1__.jpg" alt="\">

图2

可以采用下面的脚本实现

declare @tsql varchar(6000)
declare @total int 

--取得不同车站拥有的车型最大数量
select @total=  max(c) from (select  count(1) c  from dc group by 站名)t

select @tsql=isnull(@tsql+',','')
            +'max(case when rn='+rtrim(number)+' then 车型 else '''' end) ''车型'','
            +'max(case when rn='+rtrim(number)+' then 数量 else '''' end) ''数量'''
from master.dbo.spt_values
where type='P' and number between 1 and @total

select @tsql='select 站名,'+@tsql
            +' from
               (select 站名,车型,数量,
                       row_number() over(partition by 站名 order by 车型) ''rn''
                from dc) t
               group by 站名'
exec(@tsql)


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇【翻译自mos文章】asm归档路径满了 下一篇leftjoin陷阱之一对多导致数据量..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python爬虫教程(从 (2025-12-26 16:49:14)
·【全269集】B站最详 (2025-12-26 16:49:11)
·Python爬虫详解:原 (2025-12-26 16:49:09)
·Spring Boot Java: (2025-12-26 16:20:19)
·Spring BootでHello (2025-12-26 16:20:15)