我正在为会计部门进行查询。我有一个报告模板,为我提供 H eaders, D etail, T 总计以及其他行类型。行类型为" D,"我有一系列帐户(Start_Account / End_Account)。我正在尝试编写一个可以提升总帐数据的查询。我希望能够使用适当的标题描述填充每一行。不可否认,我很难过,不能手动操作。
+-----------+--------------+----------+---------------+-------------+-----------+-------------------+---------------------------+
| Report_ID | Row_Sequence | Row_Type | Start_Account | End_Account | Level_Num | Reverse_Sign_Flag | Heading_Description |
+-----------+--------------+----------+---------------+-------------+-----------+-------------------+---------------------------+
| 06 | 001 | H | | | 1 | | CONSTRUCTION INCOME |
| 06 | 002 | D | 3000 | 3099 | 10 | Y | |
| 06 | 003 | D | 3801 | 3801 | 10 | Y | |
| 06 | 004 | T | 3000 | 3099 | 11 | Y | TOTAL INCOME |
| 06 | 005 | I | 3801 | 3801 | 0 | | |
| 06 | 011 | H | | | 1 | | DIRECT CONSTRUCTION COSTS |
| 06 | 012 | D | 4000 | 4001 | 10 | | |
| 06 | 013 | D | 4011 | 4031 | 10 | | |
| 06 | 014 | D | 4041 | 4041 | 10 | | |
| 06 | 015 | T | 4000 | 4099 | 11 | | TOTAL DIRECT EXPENSES |
| 06 | 016 | E | 4002 | 4002 | 0 | | |
| 06 | 017 | E | 4032 | 4032 | 0 | | |
| 06 | 018 | E | 4051 | 4051 | 0 | | |
| 06 | 019 | T | 3000 | 3099 | 12 | Y | GROSS PROFIT FROM JOBS |
| 06 | 020 | I | 3801 | 3801 | 0 | | |
| 06 | 021 | I | 4000 | 4099 | 0 | | |
| 06 | 022 | H | | | 1 | | OVERHEAD APPLIED TO JOBS |
| 06 | 023 | D | 3402 | 3402 | 10 | Y | |
| 06 | 024 | D | 3404 | 3404 | 10 | Y | |
| 06 | 025 | D | 3417 | 3417 | 10 | Y | |
| 06 | 026 | D | 5432 | 5432 | 10 | Y | |
| 06 | 027 | D | 5471 | 5471 | 10 | Y | |
| 06 | 028 | D | 5494 | 5494 | 10 | Y | |
| 06 | 029 | D | 5495 | 5495 | 10 | Y | |
| 06 | 035 | T | 3402 | 3402 | 12 | Y | ADJUST BURDEN TO ACTUAL |
+-----------+--------------+----------+---------------+-------------+-----------+-------------------+---------------------------+
作为输出,我会:
使用JPG:
因此,例如,对于Start_Account = 3000,End_Account = 3099:
现在,当我加入总帐详细信息时,我希望能够根据开始和结束帐户查找正确的标题标题。
答案 0 :(得分:0)
很难理解你想要实现的目标。无论如何这里是一个动态创建标题的脚本。您可能需要调整逻辑以满足您的要求,但它应该是一个很好的起点:
declare @startAccount int = 3000
declare @endAccount int = 3099
declare @tmp table(Report_ID varchar(10),
Row_Sequence varchar(10),
Row_Type varchar(1),
Start_Account int,
End_Account int,
Level_Num int,
Reverse_Sign_Flag varchar(1),
Heading_Description varchar(max))
insert into @tmp values ('06','001','H',null,null,1 ,'','CONSTRUCTION INCOME') ,('06','002','D',3000,3099,10,'Y','') ,('06','003','D',3801,3801,10,'Y','') ,('06','004','T',3000,3099,11,'Y','TOTAL INCOME') ,('06','005','I',3801,3801,0 ,'','') ,('06','011','H',null,null,1 ,'','DIRECT CONSTRUCTION COSTS') ,('06','012','D',4000,4001,10 ,'','') ,('06','013','D',4011,4031,10 ,'','') ,('06','014','D',4041,4041,10 ,'','') ,('06','015','T',4000,4099,11 ,'','TOTAL DIRECT EXPENSES') ,('06','016','E',4002,4002,0 ,'','') ,('06','017','E',4032,4032,0 ,'','') ,('06','018','E',4051,4051,0 ,'','') ,('06','019','T',3000,3099,12,'Y','GROSS PROFIT FROM JOBS') ,('06','020','I',3801,3801,0 ,'','') ,('06','021','I',4000,4099,0 ,'','') ,('06','022','H',NULL,NULL,1 ,'','OVERHEAD APPLIED TO JOBS') ,('06','023','D',3402,3402,10 ,'Y','') ,('06','024','D',3404,3404,10 ,'Y','') ,('06','025','D',3417,3417,10 ,'Y','') ,('06','026','D',5432,5432,10 ,'Y','') ,('06','027','D',5471,5471,10 ,'Y','') ,('06','028','D',5494,5494,10 ,'Y','') ,('06','029','D',5495,5495,10 ,'Y','') ,('06','035','T',3402,3402,12 ,'Y','ADJUST BURDEN TO ACTUAL')
DECLARE @Heading_1 varchar(100)
, @Heading_2 varchar(100)
, @Heading_3 varchar(100)
, @minRowSequence varchar(10)
select @minRowSequence = min(Row_Sequence)
from @tmp
where Start_Account=@startAccount and End_Account=@endAccount
select @Heading_1 = Heading_Description
from @tmp
where isnull(Start_Account,'')=''
and isnull(End_Account,'')=''
and Level_Num=1
and Row_Sequence < @minRowSequence
select @Heading_2 = Heading_Description
from @tmp
where Start_Account=@startAccount
and End_Account=@endAccount
and Level_Num=11
select @Heading_3 = Heading_Description
from @tmp
where Start_Account=@startAccount
and End_Account=@endAccount
and Level_Num=12
DECLARE @sql nvarchar(max) = ''
set @sql = @sql + 'select ' + cast(@startAccount as varchar(max)) + ' AS Start_Account, '
set @sql = @sql + cast(@endAccount as varchar(max)) +' AS End_Account, '
set @sql = @sql + '''' + @Heading_1 + ''' AS Heading_1, '
set @sql = @sql + '''' + @Heading_2 + ''' AS Heading_2, '
set @sql = @sql + '''' + @Heading_3 + ''' AS Heading_3 '
exec(@sql)
输出: