您的位置:首页 > 其它

1对n的主从表关系-行列转换(主表每条记录关联的从表记录数不定)

2010-06-10 12:36 489 查看
前置条件:

主表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)









内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐