有表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
可能有些混乱,麻烦各位高手帮帮忙!表2如:
Room_No Bed_No Room_Sex Worker_No
101 A 男 234
101 B 男 null
102 A 女 232
102 B 女 245
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
先找出未分配的员工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
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
*/