日期:2014-05-18 浏览次数:20595 次
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