Sql 2005的Pivot讲解

今天因为项目需要做一个 采购单价分析报表..所以要用 sql拼出报表的数据源(注:需要行转列)..

最开始原本打算 用拼sql串的方式实现(ps:当时不知道2005新增了 pivot),结果做好了之后发现 性能太差了. ...没办法只有舍弃

然后就努力的百度-谷歌 搜索 --最后发现 sql 2005新增了 pivot 这个东西....

      接着就研究了一下. . 最开始看sql帮助文档. .看了一会 没看出了所以然来. 最后还是自己摸索;

 

 


 

 

 

代码: 

 

 

select  GID,[0],[1],[2]

from

           (select GID,BName,countBID form 表) as A

Pivot

(

      max(BName)

      for countBID in

      (

            [0],[1],[2]

      )

) as piv

 

上面是我写的 sql 语句代码

首先 我们来看  (select GID,BName,countBID form 表) as A 

这里 其实有一个隐藏的 group by 语句...也就是说 当你Pivot 里面的 max(BName) 使用的聚合的时候 就是 用的这条语句里面的列来划分;例如上面的 就是根据 GID 和 BName来分组的; 我当时调了很久才发现...

在来  我们看Pivot 里面的语句 max(BName) 这个不用说了. 大家都知道了....数学函数

下一句:

     for countBID in

for countBID in 中的countBID这个列  作用:他就是我们行转列的依据..也就是 我们要把countBID里面的数据 全部装换成列...for就是循环. 有多少行就循环多少次..只要有一个不同的countBID列值 就在查询里增加一列....

 最后 我们来看 [0],[1],[2] 这几个是列名 这里值得注意的是:这些列名必须是 countBID列里面的数据...如果不是就会报错.....

这里也限制了 行转列的 增加多少列.....例如上面的 [0],[1],[2] 也就是 只是将countBID里面的0,1,2的数据转换成列,其他的就不会..

--------------------------------------------------------------------

 

好了 就这样了. .写的不够好哈..不好意思. .....希望大家多提意见...第二次写博客!手还是一直颤抖....

 

      (

            [0],[1],[2]

      )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值