| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 594 人关注过本帖
标题:sql 统计问题
取消只看楼主 加入收藏
ivantse
Rank: 1
等 级:等待验证会员
帖 子:16
专家分:0
注 册:2010-10-18
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:2 
sql 统计问题
有以下两张表:
员工表
CREATE TABLE [dbo].[tblEmployee] (
    员工编号 [EmployeeID] [int] IDENTITY (1, 1) NOT NULL ,
    姓名 [Name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    登陆名 [LoginName] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    密码 [Password] [binary] (20) NULL ,
    EMAIL [Email] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    部门编号 [DeptID] [int] NULL ,
    基本工资 [BasicSalary] [int] NULL ,
    备注 [Title] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    电话 [Telephone] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    注册日期 [OnboardDate] [datetime] NOT NULL ,
    自我介绍 [SelfIntro] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    年假剩余小时数 [VacationRemain] [int] NULL ,
    用户级别 [EmployeeLevel] [int] NULL ,
    照片 [PhotoImage] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

加班申请表
CREATE TABLE [dbo].[tblOvertime] (
    加班申请编号[OvertimeID] [int] IDENTITY (1, 1) NOT NULL ,
    申请员工编号[EmployeeID] [int] NOT NULL ,
    审批者编号[ApproverID] [int] NULL ,
    提交时间[SubmitTime] [datetime] NOT NULL ,
    加班开始时间[StartTime] [datetime] NOT NULL ,
    加班结束时间[EndTime] [datetime] NOT NULL ,
    事由[Reason] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    审批状态[Status] [nchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , //四种状态:已提交,已否决,已取消,已批准
    加班类型[Type] [tinyint] NULL ,  //两种类型:折算成年假,折算成津贴
    否决理由[DenyReason] [nchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
    加班小时数[Hours] [int] NULL
) ON [PRIMARY]

根据登录了该系统的用户的LoginName查出与该用户同一个部门(即DeptID相同)所有员工的加班情况,我想查出的表的结构如下:

 员工姓名    加班次数    加班总小时数
testName1       2            5
testName2       1            2
testName3       0            0
testName4       3            7

补充:审批状态[Status]  为:已取消 或 已否决  或 已提交 的不算一次加班,只有 Status 为 已批准 是才算

下面的语句,查出的结果 不包括 没有加班的员工,我想要的结果要包括没加过班的员工,没加过班的员工的 加班次数和 加班总小时数 都显示为 0
select tblEmployee.EmployeeID,tblEmployee.[Name],
count(case when tblOvertime.Status='已批准' then 1 else null end) 加班次数,
Sum(case when tblOvertime.Status='已批准' then tblOvertime.Hours else 0 end) 总小时数
from tblEmployee inner join tblOvertime on tblEmployee.EmployeeID=
tblOvertime.EmployeeID where tblEmployee.DeptID  
in(select tblEmployee.DeptID from tblEmployee where tblEmployee.LoginName=@LoginName)
group by tblEmployee.EmployeeID,tblEmployee.[Name]

要查出包括没加过班的应怎样?希望大家帮个忙,在此先谢谢了!!


搜索更多相关主题的帖子: 统计 sql 
2010-10-24 15:04
ivantse
Rank: 1
等 级:等待验证会员
帖 子:16
专家分:0
注 册:2010-10-18
收藏
得分:0 
回复 3楼 tangyunzhong
第一种方法也可以,我试过了,谢谢!我这个项目还有很多地方不会的,谢谢你的帮忙!
2010-10-24 23:25
ivantse
Rank: 1
等 级:等待验证会员
帖 子:16
专家分:0
注 册:2010-10-18
收藏
得分:0 
回复 5楼 tangyunzhong
一个人力资源管理系统
2010-10-25 11:05
快速回复:sql 统计问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.056352 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved