--如果要每周以工号统计呢?就是说周六后面有个字段:本周合计
select [qclog-zc].ghname as 工号,表职员资料全体.姓名,
周日=sum(case dateint when 1 then nume else 0 end)
,周一=sum(case dateint when 2 then nume else 0 end)
,周二=sum(case dateint when 3 then nume else 0 end)
,周三=sum(case dateint when 4 then nume else 0 end)
,周四=sum(case dateint when 5 then nume else 0 end)
,周五=sum(case dateint when 6 then nume else 0 end)
,周六=sum(case dateint when 7 then nume else 0 end)
,本周合计=sum(nume)
from(
select intname,ghname,nume,dateint=datepart(weekday,dateint)
from [qclog-zc]
where dateint between '2004-07-10' and '2004-07-17'
)[qclog-zc],表职员资料全体
where [qclog-zc].intname=表职员资料全体.电脑工号
group by ghname,表职员资料全体.姓名
select [qclog-zc].ghname as 工号,表职员资料全体.姓名,
周日=sum(case dateint when 1 then nume else 0 end)
,周一=sum(case dateint when 2 then nume else 0 end)
,周二=sum(case dateint when 3 then nume else 0 end)
,周三=sum(case dateint when 4 then nume else 0 end)
,周四=sum(case dateint when 5 then nume else 0 end)
,周五=sum(case dateint when 6 then nume else 0 end)
,周六=sum(case dateint when 7 then nume else 0 end)
,本周合计=sum(nume)
from(
select intname,ghname,nume,dateint=datepart(weekday,dateint)
from [qclog-zc]
where dateint between '2004-07-10' and '2004-07-17'
)[qclog-zc],表职员资料全体
where [qclog-zc].intname=表职员资料全体.电脑工号
group by ghname,表职员资料全体.姓名
--如果要每周以工号统计呢?就是说周六后面有个字段:本周合计--因为这种要求字段名是动态的,所以得用动态SQL--查询参数
declare @dt1 datetime,@dt2 datetime
select @dt1='2004-07-10'
,@dt2='2004-07-17'--查询处理
declare @s varchar(8000),@dt datetime
select @s='select [qclog-zc].ghname as 工号,表职员资料全体.姓名'
,@dt=@dt1
while @dt<=@dt2
select @s=@s+',[周'+substring('日一二三四五六',datepart(weekday,@dt),1)
+'/'+datename(day,@dt)+']=sum(case dateint when '
+cast(datepart(weekday,@dt) as varchar)+' then nume else 0 end)'
,@dt=@dt+1
select @s=@s+',本周合计=sum(nume)
from(
select intname,ghname,nume,dateint=datepart(weekday,dateint)
from [qclog-zc]
where dateint between '''+convert(varchar,@dt1,120)
+''' and '''+convert(varchar,@dt2,120)+'''
)[qclog-zc],表职员资料全体
where [qclog-zc].intname=表职员资料全体.电脑工号
group by ghname,表职员资料全体.姓名'exec(@s)
select intname,sum(nume) from tabnume
where dateint between @dt1 and @dt2 group by intname
表里面的nume 与上面查询到的结果作一个统计,然后得出百分比。
已有一个表保存(tabesum)查询到的数据.该如何去查询?
谢谢!
上面查询结果的字段有:工号,姓名,'周日一二三四五六'--(星期共七个),周合计--共10个字段,放在一个新表tabesum,用这个表的数据与另外一个表的数据比较.另一个表是tabenewsum,它的数据是正常的数据,tabesum里保存的数据是上面查询得来的.
要的结果是它与正常数据:正常数据取数查询
select intname,sum(nume) from tabenewsum
where dateint between @dt1 and @dt2 group by intname
比较得出的百分比.同样以工号来分组。
[qclog-zc](intname,ghname,workname,nume,dateint)--int工号,工号,作业名,数量,日期(问题数量表)
用tabenewsum的数据与[qclog-zc]的数据比较.得出百分比.以工号分组.
[qclog-zc]有数据(01,20,作业1,2004-07-10; 02,30,作业2,2004-07-11)
查询时希望得到的结果(只得到周的7天数据,不能重复出现周x):
工号 周六 周日 周一 周二 周三 周四 周五
01 10% 0 0 0 0 0 0
02 0 10% 0 0 0 0 0
03 0 0 0 0 0 0 0