高分求助:向高手求解算法!

recollectpainer 2003-04-16 12:15:42
开发环境:SQL Server 2000 & VB6

SQL中有两个表:员工信息表 和 员工工资发放表
工资表中记录每次工资发放清单
每个月该发哪些人的工资从员工表中提取员工编号

问题一:
求本月哪些人的工资未发放
将未发放工资的的 员工编号、员工姓名和上次发放工资的日期查询出
绑定在一个 datagrid 控件上
请问应怎样去做查询???

问题二:
如果在工资表中有一个字符 <工资类型>
每个员工每月发放的费用中都有两种:基本工资 和 奖金
问:如何分别查询
是否需要将两种费用分到两个表中,然后分别用问题一的解法处理?
...全文
11 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
pengdali 2003-04-16
1、
select *,(select max(发放日期) from 工资表 where 员工编号=员工表.员工编号) 上次发放工资的日期 from 员工表 where 员工编号 not in (select 员工编号 from 工资表 where datediff(month,发放日期,getdate())=0)

2、
不需要可以用case语句如:
select 员工编号,case 工资类型 when '基本工资' then 工资金额 end 基本工资金额,case 工资类型 when '奖金' then 工资金额 end 奖金金额 from 工资表
回复
recollectpainer 2003-04-16
员工表: 员工编号、员工姓名、性别 ......
工资表: 员工编号、工资类型、工资金额、年、月、发放日期 ......
(此处年、月指工资发生的年、月,不是发放日期)

数据暂无,程序正在开发ing ......
回复
CrazyFor 2003-04-16
贴出部份数据和表结构,
回复
happydreamer 2003-04-16
2.可以放在一个表里


工资表:
员工编号、工资类型、工资金额、年、月、发放日期
a 基本工资 100
a 奖金 200
...

然后用交叉表的方法查询就可以
回复
happydreamer 2003-04-16
select a.员工编号,a.员工姓名,max(b. 发放日期)
from 员工表 a join 工资表 b on a.员工编号=b.员工编号
where a.员工编号 not in
(select 员工编号 from 工资表 where datediff(mm,发放日期,getdate())=0 )
group by a.员工编号,a.员工姓名


回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2003-04-16 12:15
社区公告
暂无公告