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


前置条件:

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

 

 

 

 

posted on 2010-06-10 12:36 DOGNET 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/abc8103/archive/2010/06/10/1755517.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值