首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql数据统计有关问题

2012-04-19 
sql数据统计问题有字段表tableA,格式如下:项目名称员工名称调入时间 调出时间A张三2012-4-12012-4-3B李四2

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项目上花了多少天?



[解决办法]

SQL code
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 员工名称,项目名称
[解决办法]
SQL code
--> 测试数据:[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*/
[解决办法]
SQL code
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 员工名称,项目名称
[解决办法]
SQL code
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 

热点排行