SQLSERVER 2005 与 2000 用select 语句累加字符串并排序所产的问题...

fog628 2009-02-12 02:21:07
create table #temp
(
serviceid int,
servicename varchar(100),
vendoramt money,
inidx int
)

--生成测试数据
insert into #temp(serviceid, servicename, vendoramt, inidx)
select 0, 'Rent', 1000, 10
union
select 0, 'Processing Fee', 100, 30
union
select 0, 'Damage Waiver Fee', 200, 20

declare @blockout varchar(5000)
set @blockout = ''

--用select来作累加操作
select @blockout = @blockout + '<tr><td nowrap class=n>'
+ servicename + '</td><td align=right class=m>$'
+ convert(varchar, isnull(vendoramt, 0), 1) + '</td></tr>'

from(
select top 100 PERCENT isnull(t.servicename, '') servicename, sum(t.vendoramt) vendoramt
from #temp t
group by t.servicename, t.serviceid, t.inidx
order by isnull(t.inidx, 10000)
) tmp

print @blockout

drop table #temp


以上代码在2000下可以得到正确的结果:
<tr><td nowrap class=n>Rent</td><td align=right class=m>$1,000.00</td></tr>
<tr><td nowrap class=n>Damage Waiver Fee</td><td align=right class=m>$200.00</td></tr>
<tr><td nowrap class=n>Processing Fee</td><td align=right class=m>$100.00</td></tr>

但是在2005却得到以下结果:
<tr><td nowrap class=n>Damage Waiver Fee</td><td align=right class=m>$200.00</td></tr>
<tr><td nowrap class=n>Processing Fee</td><td align=right class=m>$100.00</td></tr>
<tr><td nowrap class=n>Rent</td><td align=right class=m>$1,000.00</td></tr>

请问大家有没有什么好方法来解决此问题,因为公司有两服务器,分别用2000和2005的,当然这里排除游标...
...全文
228 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhy0530 2011-03-10
  • 打赏
  • 举报
回复
看一下结果
wwnj2006 2009-12-23
  • 打赏
  • 举报
回复
怎么解决的,正好遇到这个问题,看下回复
fog628 2009-02-12
  • 打赏
  • 举报
回复
谢谢楼上,用您推荐的第二种方法解决了此问题...
fcuandy 2009-02-12
  • 打赏
  • 举报
回复
实现这种累加,一般三种方式:

select @x=@x + colX from tb --order by 这里有不确定因素,某些行为可能导至查询计划变更,因此结果的顺序不能保证
select @x=@x + colX from tb with(index=在要order by的列上建的索引) --这种方式可以保证顺序
sql2005下还可以用xml方式,
具体语句我不写了,可以参考[推荐/精华]里的 roy_88的整理贴。行列互转。
fog628 2009-02-12
  • 打赏
  • 举报
回复
里面内嵌子语句是从邹老大那里看到的,这样的话才能保证所有的数据都有累加,代码在2000下运行了不少时间,没有出现过问题,因最近放在2005上跑,才发现这个问题,请教大家有没有好的解决方案?
fcuandy 2009-02-12
  • 打赏
  • 举报
回复
我这里的 [ ] 指不是必须的意思,像 <>指必须。 而不是作为标识符的定界符来用。
fcuandy 2009-02-12
  • 打赏
  • 举报
回复
select @x=@x + 列名 from 表 [order by .....]
这种查询的结果顺序本来就是不确定的。
ws_hgo 2009-02-12
  • 打赏
  • 举报
回复
关注..

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧