有表1、表2,表1(职工表)中有字段Worker_No,Worker_Sex,Ro_State(表示是否分配宿舍);表2(职工宿舍分配表)中有Room_No(房间号),Bed_No(床位号),Room_Sex(宿舍可入住的员工性别),Worker_No,一个房间(Room_No)里有两个床位(Bed_No值为A,B),有些房间的床位有空,即表2中对应的Worker_No为null。现在要为没有分配宿舍的职工分配宿舍,要实现在指定宿舍安排对应性别的职工。比如101是男职工宿舍,且有床位是空的,现要在这个宿舍安排职工入住。简单的说,就是将表1中Ro_State为"未分配"的Worker_No插入表2中指定房间(Room_No的值通过文本框输入)对应那行的Worker_No(该Worker_No的值为null),且要求Worker_Sex=Room_Sex。
可能有些混乱,麻烦各位高手帮帮忙!表2如:
 Room_No   Bed_No   Room_Sex   Worker_No 
101               A               男           234
101               B               男           null
102               A               女            232
102               B               女            245

解决方案 »

  1.   

    update 表2 
    set worker_no=b.worker_no
    from 表2 a join 表1 b on a.work_sex=b.room_sex
    where b.worker_no not in (select worker_no from 表1)
    and a.Bed_no is null
    and a.room_no=@Room_No
      

  2.   

    你这是个分配业务
    先找出未分配的员工select Worker_No,Worker_Sex from 表1 where Ro_State='未分配'
    再找出空床位  select * from 表2 where Worker_No is null
    前台选择一个未分配宿舍的员工包括性别,后边选出对应的宿舍,床位,然后降选择的员工号
     update 表2 set Worker_No=@Worker_No 
          where Room_No=@Room_No and Bed_No=@Bed_No and room_sex=@room_sex
      

  3.   

    仅供参考:
    create table #职工表
    (
    Worker_No varchar(100),
    Worker_Sex nchar(1),
    Ro_State char(1)
    )
    insert #职工表
    select '007', N'男', 'N'
    create table #职工宿舍分配表
    (
    Room_No int,
    Bed_No char(1), --A or B
    Room_Sex nchar(1),
    Worker_No varchar(100) --if null then empty bed
    )
    insert #职工宿舍分配表
    select '101', 'A', N'男', '234' union all
    select '101', 'B', N'男', null union all
    select '102', 'A', N'女','232' union all
    select '102', 'B', N'女', '245'--SQL:可安排的床位列表
    select a.*, b.Room_No, b.Bed_No into #可安排的床位列表 from
    (select * from #职工表 where Ro_State = 'N') a
    inner join
    (select * from #职工宿舍分配表 where isnull(Worker_No, '') = '') b
    on a.Worker_Sex = b.Room_Sexselect * from #可安排的床位列表 --显示
    /*
    Worker_No Worker_Sex Ro_State Room_No Bed_No
    007 男 N 101 B
    */
    --SQL:楼主若是需要更新的话
    update #职工表
    set Ro_State = 'Y'
    where Worker_No in
    (select Worker_No from #可安排的床位列表)
    /*
    Worker_No Worker_Sex Ro_State
    007 男 Y
    */
    update a
    set a.Worker_No = b.Worker_No
    from #职工宿舍分配表 a
    inner join #可安排的床位列表 b
    on a.Room_No = b.Room_No and a.Bed_No = b.Bed_No and a.Room_Sex = b.Worker_Sex
    where isnull(a.Worker_No, '') = ''
    /*
    Room_No Bed_No Room_Sex Worker_No
    101 A 男 234
    101 B 男 007
    102 A 女 232
    102 B 女 245
    */
      

  4.   

    我比较愚笨因为赶时间基础也很差 根据各位高手的提示 还是没摸索出来这个SQL语句 我是用在C#中的 想实现实现批量分配来着麻烦各位高手再帮我分析分析 万分感谢!