Действительно трудно понять, чего вы пытаетесь достичь.В любом случае, здесь есть скрипт, который динамически создает заголовки.Вероятно, вам придется настроить логику в соответствии с вашими требованиями, но она должна быть хорошей отправной точкой:
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)
Вывод:
