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, 20declare @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)
) tmpprint @blockoutdrop 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的,当然这里排除游标...
(
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, 20declare @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)
) tmpprint @blockoutdrop 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的,当然这里排除游标...
这种查询的结果顺序本来就是不确定的。
select @x=@x + colX from tb with(index=在要order by的列上建的索引) --这种方式可以保证顺序
sql2005下还可以用xml方式,
具体语句我不写了,可以参考[推荐/精华]里的 roy_88的整理贴。行列互转。