SQL Server varchar类型行转列及多行合并问题20090814

这几天在对pb开发的一个老程序进行优化,因为速度太慢。

检查程序原来是用到了循环,虽然只有不到四千条记录,但一条条循环起来还是比较慢的。(所以,查询记录比较多的情况下,尽量不要用循环!)

解决的办法就是删除循环,全部使用动态sql。

修改程序时,遇到如下问题: 

 

问题一:如何行转列?

行转列是很典型的问题,当然是用case语句!在此不再赘述。

生成结果如下,化验指标是动态生成的列:

  

车号 化验指标1   化验指标2  化验指标3     化验指标n  

001   灰分:0.2   null       null

001   null        水分:2.5  null

001   null        null       发热量:20

002   灰分:0.3   null       null 

 

问题二:对varchar类型的多行记录如何合并成一行? 

有了上面的结果集,想生成如下结果: 

车号 化验指标1   化验指标2  化验指标3     化验指标n

001   灰分:0.2  水分:2.5  发热量:20

002   灰分:0.3  null       null

 

如果是numeric类型的,多行合并成一行比较简单,直接sum() group by 就可以。或者和上面的问题合二为一,直接select 车号,sum(case ...end) group by 车号。

但问题是,此处是varchar类型的,直接用sum会报错,大概是说sum对varchar不适用。

 

问题复杂了,在网上查了很多类似的贴子,有的建议新建一合并函数,有的说在sql server 2005中用OUTER APPLY等解决。但我们是sql server 2000,第二种方法显然不适用。

 

正一筹莫展的时候,突然脑袋灵光一闪:不能用sum,可以用max呀!赶紧测试一下,我成功了!而且速度由原来的15秒提高到8秒!!!这几天没百干啊!

 

可以说我这个多行合并只是一个特例,因为一个车号每个化验指标只化验一次,如果化验多次那就要用到字符串拼接,就不会如此简单了。

 

下班,周末愉快!

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值