1对n的主从表关系-行列转换(主表每条记录关联的从表记录数不定)
2010-06-10 12:36
489 查看
前置条件:
主表a与子表b的定义如下,关系是一对多的关系
要求:
为统计报账中心各个审批单据所耗时间,需要提供3.1-5.31日所有“通过”和“已付款”状态的单据的各个审批人的耗时,格式要求如下:
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)
主表a与子表b的定义如下,关系是一对多的关系
要求:
为统计报账中心各个审批单据所耗时间,需要提供3.1-5.31日所有“通过”和“已付款”状态的单据的各个审批人的耗时,格式要求如下:
单据号 | 申请部门 | 申请人 | 申请时间(年月日时分) | 审批人1 | 审批人1审批时间 | 审批人2 | 审批人2审批时间 | …. | …. | 审批人n | 审批人n审批时间 |
| | | | | | | | | | | |
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)
相关文章推荐
- 简单行列转换记录
- LinQ实现DataTable不定行转列 行列转换,有图
- [MySQL] 行列转换变化各种方法实现总结(行变列报表统计、列变行数据记录统计等)
- ORACLE不定列行列转换(ZT)
- LinQ实现DataTable不定行转列 行列转换
- [MySQL] 行列转换变化各种方法实现总结(行变列报表统计、列变行数据记录统计等)
- LinQ实现DataTable不定行转列 行列转换
- 腾讯—通讯录中每条记录存放着通讯者与其所使用的号码,号码与使用者之间是多对多关系,找出使用最多的号码并输出使用者
- [MySQL] 行列转换变化各种方法实现总结(行变列报表统计、列变行数据记录统计等
- A/B表替1对多关系,要求联合查询B表只提取一条与A记录关联的记录
- Sql Sever记录的行列转换
- LinQ实现DataTable不定行转列 行列转换,有图
- A/B表为1对多关系,要求联合查询B表只提取一条与A记录关联的记录
- 把记录行列转换
- 数据库记录的行列转换
- 主从表的行列转换输出(oracle版本)
- Oracle数据库合并行记录,【WMSYS.WM_CONCAT】 函數的用法 ----【行列转换】
- 最近整理的一些行列转换sql(有自己的,有别人的),留作记录
- Day58-Oracle02 - 内连接、外连接、子查询(exists用法,关联/非关联子查询)、课堂练习(行列转换)、rownum和rowid
- MySQL] 行列转换变化各种方法实现总结(行变列报表统计、列变行数据记录统计等)