前置条件:
主表a与子表b的定义如下,关系是一对多的关系
要求:
为统计报账中心各个审批单据所耗时间,需要提供3.1-5.31日所有“通过”和“已付款”状态的单据的各个审批人的耗时,格式要求如下:
单据号 | 申请部门 | 申请人 | 申请时间(年月日时分) | 审批人1 | 审批人1审批时间 | 审批人2 | 审批人2审批时间 | …. | …. | 审批人n | 审批人n审批时间 |
|
|
|
|
|
|
|
|
|
|
|
|
sql:
declare @sql varchar(max)
select @sql=isnull(@sql+',','')+'max(case when 审批顺序='''+ltrim(审批顺序)+''' then 审批人姓名 else '''' end) as [审批人'+ltrim(审批顺序)+']'
+',max(case when 审批顺序='''+ltrim(审批顺序)+''' then Datediff(minute,审批生效时间,审批时间) else null end) as [审批时间'+ltrim(审批顺序)+']'
from (
SELECT distinct
a.ApprOrder 审批顺序
FROM Approval a
INNER JOIN ReMain rm ON a.RequestID=rm.ID
) t order by 审批顺序
set @sql='select 单据号,
部门id,部门名称,申请人id,申请人名称,
申请时间,'+@sql+' from ('+'
SELECT
rm.RAApplyNo 单据号,rm.DepID 部门id,rm.DepName 部门名称,rm.ApplyManID 申请人id,rm.ApplyManName 申请人名称,rm.ApplyDate 申请时间,
a.ApprManDutyName 审批人职位,a.ApprManID 审批人id,a.ApprManName 审批人姓名,a.CreateDate 审批生效时间,a.ApprDate 审批时间,a.ApprOrder 审批顺序
FROM Approval a INNER JOIN ReMain rm ON a.RequestID=rm.ID
WHERE
rm.ApplyDate >= ''2010-03-01''
AND rm.ApplyDate <''2010-06-1''
AND rm.[Status] IN (3,6)
) t group by
单据号,部门id,部门名称,申请人id,申请人名称,申请时间'
exec(@sql)