我这里有3个表是用来做根据它做报表统计的。
info (员工表) 字段如下
---- ------
ID ID
IDname 员工姓名
========================
dutyinfo (考勤情况表) 字段如下
----- -----
attID ID
attdate 上班日期
attname 员工ID
attAmlate 上午迟到分钟数
attpmlate 下午迟到分钟数
attAmearly 上午早退分钟数
attpmearly 下午迟到分钟数
attTlate 总迟到分钟数
attTearly 总早退分钟数
===============================
att_unattinfo (非正常出勤情况表) 自动如下
---- ------
TID ID
TattID 员工ID
Ttype 上班情况(请假,旷工)
Tdate 上班日期
AM 上午(请假,旷工)
PM 下午(请假,旷工)
我想根据这个表做一个这样的报表 统计的是某年某月的数据
=================================================
点击一个button把 某年某月的变量传进来查询。例如是2009-01月
报表就可以得到如下效果 注:如果迟到分钟数大于0则记录迟到
如果早退分钟数大于0则记录早退。如果那天上午或下午有旷工
,请假 则记录旷工,请假。
想要的如下效果
-----------------------------------------------
2009年01月出勤情况信息报表
1号 2号 …… 出勤天数
小张 正常 正常 …… 30
迟到 早退 ……
小吴 正常 正常 …… 28
旷工 请假 ……
info (员工表) 字段如下
---- ------
ID ID
IDname 员工姓名
========================
dutyinfo (考勤情况表) 字段如下
----- -----
attID ID
attdate 上班日期
attname 员工ID
attAmlate 上午迟到分钟数
attpmlate 下午迟到分钟数
attAmearly 上午早退分钟数
attpmearly 下午迟到分钟数
attTlate 总迟到分钟数
attTearly 总早退分钟数
===============================
att_unattinfo (非正常出勤情况表) 自动如下
---- ------
TID ID
TattID 员工ID
Ttype 上班情况(请假,旷工)
Tdate 上班日期
AM 上午(请假,旷工)
PM 下午(请假,旷工)
我想根据这个表做一个这样的报表 统计的是某年某月的数据
=================================================
点击一个button把 某年某月的变量传进来查询。例如是2009-01月
报表就可以得到如下效果 注:如果迟到分钟数大于0则记录迟到
如果早退分钟数大于0则记录早退。如果那天上午或下午有旷工
,请假 则记录旷工,请假。
想要的如下效果
-----------------------------------------------
2009年01月出勤情况信息报表
1号 2号 …… 出勤天数
小张 正常 正常 …… 30
迟到 早退 ……
小吴 正常 正常 …… 28
旷工 请假 ……
你可以先用sql查询出来垂直报表,然后用fr或水晶报表转成交叉报表,sql转交叉报表我没有弄过好像有难度
set nocount on
create table test(model varchar(20),date int ,qty int)
insert into test select 'a','8','10'
insert into test select 'a','10','50'
insert into test select 'b','8','100'
insert into test select 'b','9','200'
insert into test select 'b','10','100'
insert into test select 'c','10','200'
insert into test select 'd','10','300'
insert into test select 'e','11','250'
insert into test select 'e','12','100'
insert into test select 'f','12','150'
go
--测试declare @sql varchar(8000)
set @sql='select model,'
select @sql=@sql+'sum(case when date='''+cast(date as varchar(10))+''' then qty else 0 end)['+cast(date as varchar(10))+'],'
from (select distinct top 100 percent date
from test order by date)aset @sql =left(@sql,len(@sql)-1)+' from test group by model'exec(@sql) --删除测试环境
drop table test
set nocount off/**//*
model 8 9 10 11 12
-------------------- ----------- ----------- ----------- ----------- -----------
a 10 0 50 0 0
b 100 200 100 0 0
c 0 0 200 0 0
d 0 0 300 0 0
e 0 0 0 250 100
f 0 0 0 0 150
*/
小女子感激不尽。。
我的QQ 69009878
A.IDname,
case when B.attTlate > 0 then '迟到' else '正常' end as Late,
case when B.attearly > 0 then '早退' else '正常' end as Early,
C.AM,
C.PM
from info A,dutyinfo B,att_unattinfo C
where A.ID = B.attname and A.ID = C.tattID
其他条件自已加