日期:2014-05-18 浏览次数:20454 次
create table tb ( 项目名称 varchar(1), 员工名称 nvarchar(3), 调入时间 datetime, 调出时间 datetime ) insert into tb select 'A','张三','2012-4-1', '2012-4-3' union all select 'B','李四','2012-3-25', null union all select 'C','张三','2012-4-6', '2012-4-9' union all select 'D','王五','2012-4-2',null union all select 'A','张三','2012-4-10', '2012-4-13' select 员工名称,项目名称,SUM(DATEDIFF(DAY,调入时间,调出时间)) AS 时间 from tb group by 员工名称,项目名称
------解决方案--------------------
--> 测试数据:[tbl] if object_id('[tbl]') is not null drop table [tbl] create table [tbl]( [项目名称] varchar(1), [员工名称] varchar(4), [调入时间] date, [调出时间] date ) insert [tbl] select 'A','张三','2012-4-1','2012-4-3' union all select 'B','李四','2012-3-25',null union all select 'C','张三','2012-4-6','2012-4-9' union all select 'D','王五','2012-4-2',null union all select 'A','张三','2012-4-10','2012-4-13' select [项目名称],[员工名称], SUM(DATEDIFF(dd,[调入时间],[调出时间])) as 总天数 from tbl where [员工名称]='张三' group by [员工名称] /* 员工名称 总天数 张三 8 */ select [员工名称],[项目名称], SUM(DATEDIFF(dd,[调入时间],[调出时间])) as 总天数 from tbl where [员工名称]='张三' group by [员工名称],[项目名称] /* 员工名称 项目名称 总天数 张三 A 5 张三 C 3 */
------解决方案--------------------
create table tb ( 项目名称 varchar(1), 员工名称 nvarchar(3), 调入时间 datetime, 调出时间 datetime ) insert into tb select 'A','张三','2012-4-1', '2012-4-3' union all select 'B','李四','2012-3-25', null union all select 'C','张三','2012-4-6', '2012-4-9' union all select 'D','王五','2012-4-2',null union all select 'A','张三','2012-4-10', '2012-4-13' select 员工名称,项目名称,SUM(DATEDIFF(DAY,调入时间,调出时间)) AS 时间 from tb where 员工名称='张三' and 项目名称='A' group by 员工名称,项目名称
------解决方案--------------------
CREATE TABLE DEMO (项目名称 VARCHAR(100),员工名称 VARCHAR(100),调入时间 DATETIME,调出时间 DATETIME) INSERT INTO DEMO SELECT 'A','张三','2012-4-1','2012-4-3' UNION ALL SELECT 'B','李四','2012-3-25',NULL UNION ALL SELECT 'C','张三','2012-4-6','2012-4-9' UNION ALL SELECT 'D','王五','2012-4-2',NULL UNION ALL SELECT 'A','张三','2012-4-10','2012-4-13' SELECT 员工名称,SUM(DATEDIFF(DAY,调入时间,ISNULL(调出时间,GETDATE()))+1) FROM DEMO GROUP BY 员工名称 ORDER BY 员工名称 SELECT 员工名称,项目名称,SUM(DATEDIFF(DAY,调入时间,ISNULL(调出时间,GETDATE()))+1) FROM DEMO GROUP BY 员工名称,项目名称 ORDER BY 员工名称,项目名称 DROP TABLE DEMO