sql语句急救——在线等(34分)

  • 主题发起人 主题发起人 huangli_nj
  • 开始时间 开始时间
H

huangli_nj

Unregistered / Unconfirmed
GUEST, unregistred user!
zone_code,zone_name,F_sn,f_name,CSCode,CSName,bz1,Material,stcode,STContent,sdisnew,sdisnew1,is_join,produce_Type
现在我想用sql的循环得到这样的三个值
第一次:
第一个值:produce_Type
第二个值:one_code,zone_name,F_sn,f_name,CSCode,CSName,bz1,Material,stcode,STContent,sdisnew,sdisnew1,is_join
第三个值:null
第二次:
第一个值:sdisnew1
第二个值:one_code,zone_name,F_sn,f_name,CSCode,CSName,bz1,Material,stcode,STContent,sdisnew
第三个值:produce_Type

第三次:
第一个值:STContent
第二个值:one_code,zone_name,F_sn,f_name,CSCode,CSName,bz1,Material,stcode
第三个值:sdisnew1
第四次:
第一个值:Material
第二个值:one_code,zone_name,F_sn,f_name,CSCode,CSName,bz1
第三个值:STContent
第五次:
第一个值:CSName
第二个值:one_code,zone_name,F_sn,f_name,CSCode
第三个值:Material
第六次:
第一个值:f_name
第二个值:one_code,zone_name,F_sn
第三个值:CSName
第七次:
第一个值:zone_name
第二个值:zone_code
第三个值:f_name
第六次:
第一个值:zone_code
第二个值:null
第三个值:zone_name

也就是说我第一次取值的时候,第一个值就是最后一个逗号后面的值,第二值是就是最后一个逗号前面的所有的值 第三个值不取
第二次取得时候第一个值是取倒数第二个逗号和倒数第三个逗号之间的值 第二个值是倒数第三个逗号之前的所有的值 第三个值就是第一次取得第一个值 依次类推

这个循环怎么写
 
假设一共N个元素,N-1个逗号,SL表示元素集合,SL(<i)表示小于i的所有元素值之和(用的是伪代码):
i:=N+2;
LastValue:=Null;
while i>0 begin
i:=i-2;
Return:=取值函数(SL,SL(<i),LastValue);
LastValue:=SL;
end;
 
to:dey-999谢谢 但是我想用sql去实现
 
declare @sStr varchar(1000),@sTempStr varchar(1000),@iInc int
set @sStr='zone_code,zone_name,F_sn,f_name,CSCode,CSName,bz1,Material,stcode,STContent,sdisnew,sdisnew1,is_join,produce_Type'
set @iInc=0
if exists(select * from sysobjects where name='SymbolPositionTab' and xtype='U')
drop table SymbolPositionTab
create table SymbolPositionTab(iInc int not null identity(1,1),iPos int)

/*取出“,”位置*/
set @sTempStr= @sStr
while @sTempStr <> ''
begin
set @iInc=charindex(',',@sTempStr)
if @iInc>0
begin
if not exists(select * from SymbolPositionTab)
Insert SymbolPositionTab(iPos) values(@iInc)
else
Insert SymbolPositionTab(iPos) select Max(iPos)+@iInc from SymbolPositionTab
end
if (@iInc <=0)
set @sTempStr=''
else
set @sTempStr=substring(@sTempStr,@iInc+1,len(@sTempStr)-@iInc)
end

select * from SymbolPositionTab
if exists(select * from sysobjects where name='ResultTab' and xtype='U')
drop table ResultTab
create table ResultTab(iInc int not null identity(1,1),sField1 varchar(500),sField2 varchar(500),sField3 varchar(500))
declare @iPosn1 int,@iPosn2 int,@iPosn int,@iPosn0 int
set @iInc=0
set @iPosn0=(select top 1 iPos from SymbolPositionTab)
set @iPosn=0
set @iPosn1=0
set @iPosn2=0
while exists(select * from SymbolPositionTab)
begin
if @iInc = 0
begin
set @iInc=1
set @iPosn=(select max(iPos) from SymbolPositionTab)
insert ResultTab(sField1,sField2,sField3) values(substring(@sStr,@iPosn+1,len(@sStr)),substring(@sStr,1,@iPosn-1),Null)
delete SymbolPositionTab where iPos = @iPosn
end
else
begin
set @iPosn1=(select max(iPos) from SymbolPositionTab)
set @iPosn2=(select max(iPos) from SymbolPositionTab where iPos <> @iPosn1)
insert ResultTab(sField1,sField2,sField3)
select sField1=substring(@sStr,@iPosn2+1,@iPosn1-@iPosn2-1),
sField2=substring(@sStr,1,@iPosn2-1),
sField3=(select top 1 sField1 from ResultTab order by iInc desc)
delete SymbolPositionTab where (iPos = @iPosn2) or (iPos = @iPosn1)
end
end
insert ResultTab(sField1,sField2,sField3)
select sField1=substring(@sStr,1,@iPosn0-1),
sField2=Null,
sField3=(select top 1 sField1 from ResultTab order by iInc desc)
select * from ResultTab
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
700
import
I
I
回复
0
查看
644
import
I
后退
顶部