请问这样复杂的SQL如何写?
现有一个查询(Select1),查出的结果集(Rs1),
另一个查询(Select2 ),Select2中要根据Rs1中每条记录的指定列(colum1)的值作为查询条件进行查询,
也就是Select2的查询次数根据Rs1中的记录数来确定,select2的查询条件根据Rs1中记录的列值决定请问能否用一条SQL语句来实现?
如果不能用自定义函数或存储过程如何写?谢谢

解决方案 »

  1.   

    select * from tab2 where colum2 in(select colum1 from tab1)
      

  2.   

    Select2的查询次数  是什么意思?楼主可以列出部分数据说明你的意图一般情况
    select case rs1 when .. then .. when then end as [columnname]
    from 
    (Select1) a
      

  3.   

    如果需求是这样:
    ------------------
    SELECT 1:SELECT col1
    FROM table1
    ....
    对SELECT 1中得到的每笔记录SELECT 2:SELECT *
    FROM table2
    WHERE colxx='SELECT 1 的col1的取值'--------------------------------
    完全可以做成这样:
    SELECT *
    FROM table1 a, table2 b
    WHERE a.col1=b.colxx
      

  4.   

    采用游标,写两个存储过程   我发一个我自己写的类似的例子,你可以参考下!
    CREATE PROCEDURE  XP_SalarmControl
     AS
    declare @v_seller_no varchar(50);
    declare @v_seller_no_head varchar(50); 
    declare @v_status int;
    declare @pSuccess int;
     begin
     set @v_status=0
     declare DZCursor CURSOR for  select  seller_no from t_priseller_store order by seller_no
     open  DZCursor
    fetch next from DZCursor into @v_seller_no        ---------------先获取上一个seller_no -----------
    while @v_status=0
    begin
    set @v_seller_no_head=@v_seller_no
    fetch next from DZCursor into @v_seller_no
    if @@fetch_status<>0
    begin
      exec  XP_Storealarm  @v_seller_no_head,@pSuccess output      -----------处理最后一条记录----------------
      close DZCursor                  ---------------------必须删除游标
      deallocate DZCursor
    return
    end
    else
    begin
    if @v_seller_no_head<>@v_seller_no        ---------------------------------下一个seller不等于当前seller-------------
    exec  XP_Storealarm  @v_seller_no_head,@pSuccess output
    set @v_status=0
    end
    end
      close DZCursor
      deallocate DZCursor
     end
    GO
    -----------------------------------------------------------------------------------
    CREATE PROCEDURE  XP_Storealarm
    (@seller_no varchar(50),
    @pSuccess int output
    )
     AS
    declare @v_invent_no varchar(50);
    declare @v_invent_num int;
    declare @v_mobile_no varchar(50);
    declare @v_low varchar(50);
    declare @v_invent_name varchar(100);
    declare @v_tempmsg varchar(500);
    declare @v_msgcontent varchar(500);
    declare @p_sendtime datetime; begin
     set @v_tempmsg=''
     set @p_sendtime=getdate()
     select @v_mobile_no=mobile_no  from t_seller where seller_no=@seller_no
     if @v_mobile_no =''
     insert into  t_alarm_errlog(seller_no,memo,logtime) values (@seller_no,'经销商还未填写手机号码',getdate())
     else
     begin
     declare AlarmCursor CURSOR for  select  invent_no,low_alarm,invent_num from    t_priseller_store where cast(invent_num as int)<cast(low_alarm as int) and seller_no=@seller_no
     open  AlarmCursor
    fetch next from AlarmCursor into @v_invent_no,@v_low,@v_invent_num
    while @@fetch_status=0
    begin
    begin
    select @v_invent_name=inventory_name from t_inventory where inventory_no= @v_invent_no
    set @v_tempmsg=@v_tempmsg+@v_invent_no+' '+@v_invent_name+',当前库存为'+cast(@v_invent_num as varchar)+'瓶;'
    end
    fetch next from AlarmCursor into @v_invent_no,@v_low,@v_invent_num
    end
      close AlarmCursor
      deallocate AlarmCursor
      set @v_msgcontent='您好,库存提醒!'+@v_tempmsg+'已低于预警值,请及时补货,谢谢!'
      -----------------调用下行接口--------------------------------
      print '@v_msgcontent:'+@v_msgcontent
     end
     end
    GO
      

  5.   

    marco08(天道酬勤) ( ) 信誉:100    Blog  2006-12-8 9:44:34  得分: 0  
    樓主最好把表結構, 數據和想要的結果集貼出來同上.