sql数据统计问题
有字段表tableA,格式如下:
项目名称 员工名称 调入时间 调出时间
A 张三 2012-4-1 2012-4-3
B 李四 2012-3-25
C 张三 2012-4-6 2012-4-9
D 王五 2012-4-2
A 张三 2012-4-10 2012-4-13
调出时间为空的代表现在还在这个项目上工作;
现在要用一条sql语句求出:
张三 一共在项目上花了多少天?
张三 在A项目上花了多少天?
[解决办法]
create table tb( 项目名称 varchar(1), 员工名称 nvarchar(3), 调入时间 datetime, 调出时间 datetime)insert into tb select 'A','张三','2012-4-1', '2012-4-3' union allselect 'B','李四','2012-3-25', null union allselect 'C','张三','2012-4-6', '2012-4-9' union allselect 'D','王五','2012-4-2',null union allselect '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 allselect 'B','李四','2012-3-25',null union allselect 'C','张三','2012-4-6','2012-4-9' union allselect 'D','王五','2012-4-2',null union allselect '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 allselect 'B','李四','2012-3-25', null union allselect 'C','张三','2012-4-6', '2012-4-9' union allselect 'D','王五','2012-4-2',null union allselect '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 DEMOSELECT 'A','张三','2012-4-1','2012-4-3'UNION ALLSELECT 'B','李四','2012-3-25',NULLUNION ALLSELECT 'C','张三','2012-4-6','2012-4-9'UNION ALLSELECT 'D','王五','2012-4-2',NULL UNION ALLSELECT 'A','张三','2012-4-10','2012-4-13'SELECT 员工名称,SUM(DATEDIFF(DAY,调入时间,ISNULL(调出时间,GETDATE()))+1)FROM DEMOGROUP BY 员工名称ORDER BY 员工名称SELECT 员工名称,项目名称,SUM(DATEDIFF(DAY,调入时间,ISNULL(调出时间,GETDATE()))+1)FROM DEMOGROUP BY 员工名称,项目名称ORDER BY 员工名称,项目名称DROP TABLE DEMO