--主表, 需要被更新的表
create table #t1(
c1 nvarchar(100),
c2 nvarchar(100),
c3 int)
go 
insert #t1 
select 'x1','y1','' union all
select 'x2','y2','' union all
select 'x3','y2','' union all
select 'x4','y3','' --变量表
create table #t2(
d1 nvarchar(100),
d2 nvarchar(200),
d3 int)
go
insert #t2
select  'all','all',3 union all
select  'x2','all',2 union all
select 'x2','<y2',3  
有如上数据, 要求, 更新#t1.c3字段为#t2.d3, 条件为#t2中的d1,d2, 如all 代表所有x1-x3, <y2代表y1, 请教个方案? (如有不理解的地方,我再修改) 请各位达达们帮忙啦。。

解决方案 »

  1.   

     要求, 更新#t1.c3字段为#t2.d3, 条件为#t2中的d1,d2, 如all 代表所有x1-x3, <y2代表y1,这句没懂!
      

  2.   

    没看懂,有点象公式运算?参考这个:
    /*
    分解公式
    将公式按运算分解到表中
    */
    declare @str varchar(100)
    declare @i int,@str1 varchar(10),@str2 varchar(10)set @str='3+7+12-13+8-9*123' --要分解的字符串
    declare @tb table(num varchar(20),operation varchar(2)) --定义保存结果的表--公式分拆
    set @i=patindex('%[^0-9]%',@str)
    while @i>0
    begin
    select @str1=left(@str,@i-1)
    ,@str=substring(@str,@i,8000)
    ,@i=patindex('%[0-9]%',@str)
    ,@str2=left(@str,@i-1)
    ,@str=substring(@str,@i,8000)
    ,@i=patindex('%[^0-9]%',@str)
    insert into @tb values(@str1,@str2)
    end
    if @str<>'' insert into @tb values(@str,'')--显示分拆结果
    select * from @tb
      

  3.   

    d1 d2 d3
    all all 3  <--这一行怎么处理
    x2 all 2
    x2 <y2 3
      

  4.   

    谢谢大家这么多回复, 意思就是#t2表d1,d2是条件,满足条件后update c3 = d3 ,
    像all , all, 3 则,可以理解为:c1 , c2 所有值 都包含在ALL里, 即默认c3为3, 
    而x2, all, 2 ,而当c1=x2时, c2 所有值  , c3=2
    而x2,<y2, 3, 当c1=x2,c2<y2, 也就是y1时, c3 =3请帮忙出个思路吧。把条件放到表中, 是因为 用户以后有权力自己加条件。
      

  5.   

    比较抽象, 可以实际点:表1 省份(名称,人口,数据), 表2, 条件(名称条件,人口条件,默认数据)
    all,all , 3 即所有省份,所有人口条件, 数据=3,
    海南,all,2 海南, 所有人口条件, 数据=2
    山东/河南,<400W,3, 山东/河南,并且人口小于400W,数据=3
      

  6.   


    有没有带平方/求根/sum这样的公式处理方法?
      

  7.   

    select * , charindex('<',d2), right(d2,len(d2)-charindex('<',d2)) 
    from #t1 a, #t2 b
    where (c1=d1 or d1='all')
    and (1=2
        or c2=d2
        or d2='all'
        or (charindex('<',d2)>0 and 
            c2<right(d2,len(d2)-charindex('<',d2))
            )
        )
      

  8.   


    -----------------------c1 c2 c3 d1 d2 d3 (无列名) (无列名)
    x1 y1 0 all all 3 0 all
    x2 y2 0 all all 3 0 all
    x3 y2 0 all all 3 0 all
    x4 y3 0 all all 3 0 all
    x2 y2 0 x2 all 2 0 all结果不对呀?
      

  9.   

    sorry, 我理解错了, 可以满足要求, 我晚上给分, 有问题再另开贴, 多谢哈。