sql疑难,欢迎QuickSilver,欢迎高手 (100分)

  • 主题发起人 主题发起人 wallis
  • 开始时间 开始时间
W

wallis

Unregistered / Unconfirmed
GUEST, unregistred user!
各位:
小弟的SQL学的不怎么样,小面的问题请大家多多帮忙!问题如下:
现有表A(p_id,data)和表B(id,p_id,num),需要根据要求生成表C(id,p_id,datanum)。
其中表A、B是一对多的关系,p_id是表A中的Key,id是表B、C中的Key,data、datanum字段是Char类型,
num是int类型。生成表C的要求是:根据表A中每条记录的data加上表B中相应记录的num数量,生成表C中
的datanum。例如:
表A 表B 表C
1 'abc' 1 1 3 1 1 'abc1'
2 1 'abc2'
3 1 'abc3'
请问这用mssql的存储过程怎样实现呢?

 
帮帮忙嘛,大虾们。QuickSilver呢,你看了没?
 
Select id,A.p_id,A.data+cast(b.num as char) as datanum
From A,B
Where A.p_id=B.p_id

是要这种结果吗,如不是,请再多列一点数据出来。
 
不是吧, 根据例子来看是根据表b里面的num字段值来扩展表a中每条记录。即num是几则表c中就有几条pid相同而datanum最后几位是递增数字的纪录
用存贮过程解决很简单,只是不知道效率如何。
 
create procedure proc
as
declare @num int
declare @id int
declare @data varchar(50)
declare @i int
declare mycur cursor for select pid,date form a
open mycur
fetch next into @id,@data
while (@@fetch_status=0)
set @i=1
begin
select @num=num from b where p_id=@id
if @num is null
continue
while (@i<@num)
begin
insert into c (p_id,data) values (@id,@data+cast(@i as varchar(10))
set @i=@i+1
end
fetch next into @id,@data
end
close mycur
deallocate mycur
//表c的id字段应为自增
 
先谢谢各位,待验证后分数马上送上
 
用不着那么麻烦吧
insert into c(p_id,datanum)
(select b.p_id,(a.data+cast(b.num as varchar(5)))
from b join a on b.p_id = a.p_id)

还可以用replicate可以格式化b.num到指定长度
 
多人接受答案了。
 
后退
顶部