SQL语句查询解决实际问题?

表1(人员)
num name bank
01 张三 1000001
02 李四 1000002
03 王五 1000003
05 孔八 1000004

表2(工资数据)
num imonth jb_gz jj_gz kk_gz
01 06 1000 600 100
02 06 1200 800 300
03 06 800 200 100
04 06 2000 500 200

bank 银行帐户
imonth 月份
jb_gz 基本工资
jj_gz 奖金
kk_gz 应扣工资

问题1 请用查询语句找出缺少人员的档案工资记录
问题2 请查询每个人的当月工资数据,并计算出实发金额

问题1:我觉得问题1问的有问题
如果你是想求表1中有而表2中没有的5号孔八,是下面这条:
select * from 表1 where num=(select num from 表1 minus select num from 表2);
如果你是想求表2中有而表1中没有的4号,是下面这条:
select * from 表2 where num=(select num from表2 minus select num from 表1)
问题2:
select b.num ,a.name,a.bank,imonth,b.jb_ggz,b.jj_gz,b.kk_gz,b.jb_gz+b.jj_gz-b.kk_gz 实发金额 from 表1 a,表2 b where a.num=b.num
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-15
select a.number,a.name,a.bank from 人员 a
where a.number not in(select 工资数据.num from 工资数据);

select a.name,b.imonth,b.jb_gz,b.jj_gz,b.kk_gz,(jb_gz+jj_gz+kk_gz) as sj_gz
)
from 人员 a
inner join 工资数据 b on a.number=b.num;

要下班了 没有检测,请你注意测试一下。
第2个回答  2009-08-15
保证数据正确

以下代码直接可执行
此代码为临时代码
执行完毕后不会有任何数据残存
请您放心使用

declare @member table
(
num char(2) ,
[name] nvarchar(10),
bank varchar(20)
)

insert @member(num,[name],bank)
select '01','张三','1000001'
union select '02','李四','1000002'
union select '03','王五','1000003'
union select '05','孔八','1000004'

declare @Num table
(
num char(2) ,
imonth char(2),
jb_gz int,
jj_gz int ,
kk_gz int
)

insert @Num (num, imonth,jb_gz,jj_gz, kk_gz)
select '01','06', 1000,600, 100
union select '02','06', 1200,800, 300
union select '03','06', 800, 200, 100
union select '04','06', 2000,500, 200

--全部信息
select * from @member as m right join @Num as n on (n.num=m.num)

--缺员工资信息
select n.* from @member as m right join @Num as n on (n.num=m.num) where m.num is null

--计算工资

select 员工=m.name,实际工资=(n.jb_gz+n.jj_gz-n.kk_gz) from @member as m inner join @Num as n on (n.num=m.num)
第3个回答  2009-08-15
问题一:select * from 表1 where num not in (select num from 表2)

问题二:select a.num,b.name,b.bank,a.imonth,a.jb_gz,a.jj_gz,a.kk_gz,jb_gz+jj_gz-kk_gz as sj_gz from 表2 a left join 表1 b on a.num=b.num where a.month='06'

以上希望对你有所帮助