求一SQL语句 ( 积分: 80 )

  • 主题发起人 主题发起人 zlibo
  • 开始时间 开始时间
Z

zlibo

Unregistered / Unconfirmed
GUEST, unregistred user!
日期 姓名 下机重量 工段
2007-6-1 张三 20 A
2007-6-1 张三 11 A
2007-6-2 张三 11 A
2007-6-2 张三 11 B
2007-6-3 李四 11 A
2007-6-5 李四 11 B
2007-6-6 王五 11 A

写SQL语句,求:在要求的时间段内,每个人在每个工段(共有A、B两个工段)所工作的天数(只要某人某天有产量即算工作一天,如果某人某天在AB两个工段都有产量,则AB段各分0.5天)

此例子答案应为:
张三 A 1.5
张三 B 0.5
李四 A 1
李四 B 1
王五 A 1
 
没人能解决?
 
declare @t table(日期 datetime, 姓名 varchar(10), 下机重量 int, 工段 char(1))
insert @t (日期 ,姓名,下机重量,工段) values('2007-6-1', '张三', 20, 'A')
insert @t (日期 ,姓名,下机重量,工段) values('2007-6-1', '张三', 11, 'A')
insert @t (日期 ,姓名,下机重量,工段) values('2007-6-2', '张三', 11, 'A')
insert @t (日期 ,姓名,下机重量,工段) values('2007-6-2', '张三', 11, 'B')
insert @t (日期 ,姓名,下机重量,工段) values('2007-6-3', '李四', 11, 'A')
insert @t (日期 ,姓名,下机重量,工段) values('2007-6-5', '李四', 11, 'B')
insert @t (日期 ,姓名,下机重量,工段) values('2007-6-6', '王五', 11, 'A')

select 日期,姓名,工段 from @t group by 日期,姓名,工段
SELECT 日期,姓名,Count(*) as 工段数 FROM (select 日期,姓名,工段 from @t group by 日期,姓名,工段) as a GROUP BY 日期,姓名

select A.姓名,A.工段,SUM(1.0/B.工段数)
from
(select 日期,姓名,工段 from @t group by 日期,姓名,工段) as A INNER JOIN
(SELECT 日期,姓名,Count(*) as 工段数 FROM (select 日期,姓名,工段 from @t group by 日期,姓名,工段) as a GROUP BY 日期,姓名) AS B ON A.日期 = B.日期 AND A.姓名 = B.姓名
GROUP BY A.姓名,A.工段
ORDER BY 姓名,工段
 
SELECT 姓名,工段,Sum(j) as j
FROM
( SELECT 姓名,日期,工段,1.0 / (SELECT COUNT(DISTINCT 工段) FROM @T AS A WHERE (A.日期 = B.日期) AND (A.姓名 = B.姓名)) as j
FROM @T AS B
GROUP BY 姓名,日期,工段
) as a
GROUP BY 姓名,工段
ORDER BY 姓名,工段
 
佩服得五体投地!
 
后退
顶部