欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

sql数据怎么循环

更新时间: 2014-01-05 02:17:35 责任编辑: Author_N1

 

SQL数据如何循环?
表结构如下:
os_no         pn_po
------------------------------------------------------------
SOBZ111121LOG01 PO-138490
SOBZ130819ZAL01 PO-1006818/PO-1006820/PO-1006823/PO-1006825
SOBZ130517FRE01 PO-1004245/PO-1004248/PO-1004426/PO-1004661
------------------------------------------------------------
查询结果格式如下:
so_no           po
------------------------------------------------------------
SOBZ130517FRE01 PO-1004245
SOBZ130517FRE01 PO-1004248
SOBZ130517FRE01 PO-1004426
SOBZ130517FRE01 PO-1004661
SOBZ111121LOG01 PO-138490
SOBZ130819ZAL01 PO-1006818
............... ..........
--------------------------------------------------------------
declare @num int
declare @i int
declare @k int
declare @f int
declare @temp table(po varchar(20),so_no varchar(20))
set @i=0
set @f=0
declare @s varchar(400)
declare @po varchar(20)
declare @so_no varchar(20)

select @num=len(pn_po)-len(replace(pn_po,'/','')),@s=pn_po,@k=charindex('/',pn_po),@so_no=os_no from mf_pos_z
where os_no='SOBZ130819ZAL01' or os_no='SOBZ130517FRE01' or os_no='SOBZ111121LOG01'
--这儿如何加一个大循环,因为下面小循环中有给变量赋值的语句,不能用游标啊
    while(@i<=@num)
      begin
        if(@k>1)
          begin
           set @po=left(@s,@k-1)
           set @s=substring(@s,@k+1,len(@s)-@k+1)
           insert into @temp(po,so_no)
           values(@po,@so_no)
          end
        else
        begin
         insert into @temp(po,so_no)
         values(@s,@so_no)
        end 
         set @i=@i+1
     end
 
select * from @temp
--参考方法--
http://blog.csdn.net/wufeng4552/article/details/4534365
--参考方法--
create table #table1(
os_no varchar(100) null,
pn_po varchar(500) null
)
create table #last(
os_no varchar(100) null,
pn_po varchar(500) null
)
create table #linshi(
os_no varchar(100) null,
pn_po varchar(500) null
)

insert into  #table1
select 'SOBZ111121LOG01','PO-138490' union
select 'SOBZ130819ZAL01','PO-1006818/PO-1006820/PO-1006823/PO-1006825' union
select 'SOBZ130517FRE01','PO-1004245/PO-1004248/PO-1004426/PO-1004661' 

select * From #table1

declare @i int,@max int
set @i=1
select @max=max(LEN(pn_po)) from #table1
while @i<@max
begin

insert into #last
select * from #table1 where CHARINDEX('/',pn_po)=0
delete #table1 where CHARINDEX('/',pn_po)=0

insert into #last
select os_no,substring(pn_po,1,CHARINDEX('/',pn_po)-1) from #table1

insert into #linshi
select os_no,substring(pn_po,CHARINDEX('/',pn_po)+1,LEN(pn_po)) from #table1

truncate table #table1
insert into #table1
select * from #linshi
truncate table #linshi
select @i=@i+1
end

select * from #last


结果:
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:17:35
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8083/
本文WWW.DOC100.NET DOC100.NET版权所有。