Chinaunix首页 | 论坛 | 博客
  • 博客访问: 141389
  • 博文数量: 56
  • 博客积分: 245
  • 博客等级: 二等列兵
  • 技术积分: 520
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-08 14:43
个人简介

慢慢来

文章分类

全部博文(56)

文章存档

2017年(5)

2016年(2)

2015年(6)

2014年(28)

2013年(5)

2012年(10)

我的朋友

分类: Sybase

2014-03-17 15:20:43


最近同事询问在Sybase中将多行结果集合并的方法,试着用cursor做了个简单的解决办法,试了下可行。(可能其中算法不够最优,提供思路而已)
因为在Sybase中无法用coalesce 一次将多行结果显示为一行 其中code结果可以以','连接

asset_status_hist 表结构如下,

[52] HGCDB1.dmo_govcorp.1> desc asset_status_hist
|Column name         |Type         |I|Null|Dflt|Rule|Table               |Num
|--------------------|-------------|-|----|----|----|--------------------|---
|asset_id            |binary(8   ) |0|No  |    |    |asset_status_hist   |  1
|asset_status_cd     |char(3   )   |0|No  |    |    |asset_status_hist   |  2
|status_eff_dt       |smalldatetime|0|No  |    |    |asset_status_hist   |  3
|status_end_dt       |datetime     |0|Yes |    |    |asset_status_hist   |  4


(return status = 0)

可以尝试如下方法:


创建临时储存的临时表:

create table #comb (asset_id binary(8), asset_status_cd varchar(1024))
go


点击(此处)折叠或打开

  1. declare cur2 cursor for select asset_id, asset_status_cd from asset_status_hist where asset_id in (0x000019000000041d,0x000019000000051c,0x000019000000061f) order by asset_id

  2. declare @str varchar(1024)
  3. declare @asset_status_cd char(3)
  4. declare @oid binary(8)
  5. declare @oid_now binary(8)
  6. open cur2
  7. fetch cur2 into @oid_now,@asset_status_cd
  8. while @@fetch_status = 0
  9. begin
  10.  
  11. if (@oid <> @oid_now or @oid is null)
  12. begin
  13. if @oid is not null
  14. begin
  15. insert #comb(asset_id, asset_status_cd) values( @oid, substring(@str,1,char_length(@str)-1))
  16. end

  17. set @str = null
  18. set @oid = @oid_now
  19. end

  20. set @str = @str||@asset_status_cd
  21. set @str = @str||','

  22. fetch cur2 into @oid_now,@asset_status_cd
  23. end


  24. insert #comb(asset_id, asset_status_cd) values( @oid, substring(@str,1,char_length(@str)-1))





阅读(586) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~