日期:2014-05-19  浏览次数:20572 次

技术性散分:不用游标做一个汇总的逆过程
比如:表a:
        3             beijin
        2             上海


变成:
beijin
beijin
beijin
上海
上海

------解决方案--------------------

create table T(id int, name nvarchar(10))
insert T select 3, 'beijin '
union all select 2, '上海 '


declare @i int
select @i=max(id) from T
set rowcount @i
select ID=identity(int, 1, 1) into #T from syscolumns, sysobjects
set rowcount 0

select A.name from T as A, #T as B
where A.id> =B.id order by name

--result

name
----------
beijin
beijin
beijin
上海
上海

(5 row(s) affected)
------解决方案--------------------
--删除环境
drop table T, #T
------解决方案--------------------
create table ta(id int, name varchar(10))
insert ta
select 3 , 'beijin '
union all select 2 , '上海 '

declare @ta table(id int)
declare @i int,@j int
select @i=1,@j=10
while @i!> @j
begin
insert @ta select @i
select @i=@i+1
end
select name from @ta a ,ta b
where a.id!> b.id

name
----------
beijin
beijin
beijin
上海
上海

(所影响的行数为 5 行)
------解决方案--------------------
--试试
create table #a(i int,a varchar(10))
insert into #a
select 3, 'beijing ' union all
select 2, 'shanghai 'union all
select 4, 'qingdao '

declare @i int,@a varchar(10)

select top 1 @i = i,@a = a from #a
where i > 1

while @@ROWCOUNT> 0
begin
update #a
set i = 1
where a = @a

while(@i > 1)
begin
insert into #a
select 1,@a
set @i = @i -1
end

select top 1 @i = i,@a = a from #a
where i > 1
end

select * from #a
order by 1,2
drop table #a

i a
----------- ----------
1 beijing
1 beijing
1 beijing
1 qingdao
1 qingdao
1 qingdao
1 qingdao
1 shanghai
1 shanghai

(所影响的行数为 9 行)

------解决方案--------------------
我的方法好像是最笨的。
------解决方案--------------------
哈哈
学习下
顺便接点分
------解决方案--------------------
接分........
------解决方案--------------------
这一段是生成一个递增的表变量从1-10,表变量和表连接
a.id!> b.id--如果表的id为3,不大于变量的id,对应的为1,2,3有三次.
与楼上的生成临时表是相同的
declare @ta table(id int)
declare @i int,@j int
select @i=1,@j=10
while @i!> @j
begin
insert @ta select @i
select @i=@i+1
end

------解决方案--------------------
哦,跟楼上差不多。
------解决方案--------------------
好方法都被抢光了。。。
------解决方案--------------------