Заполнение строк на основе диапазонов - PullRequest
0 голосов
/ 23 мая 2018

Я работаю над запросом для бухгалтерии.У меня есть шаблон отчета, который предоставляет мне H eaders, D etail, T otal и другие типы строк.Где тип строки "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   |
+-----------+--------------+----------+---------------+-------------+-----------+-------------------+---------------------------+

В качестве выходных данных я бы имел:

  • Start_Account
  • End_Account
  • Heading_1
  • Heading_2
  • Heading_3

Использование JPG:

  • Level_Num 1 будет соответствовать Heading_1
  • Level_Num 11 будет соответствовать Heading_2
  • Levl_Num 12 будет Heading_3

Так, например, для Start_Account = 3000, End_Account = 3099:

  • Heading_1 будет "Строительный доход"
  • Заголовок_2 будет «Общий доход»,
  • Заголовок_3 будет «Валовая прибыль от рабочих мест».

Теперь, когда я присоединяюсь к деталям главной книги, я хотел бы иметь возможность искать правильные заголовки заголовков на основе начального и конечного счетов.

1 Ответ

0 голосов
/ 13 июня 2018

Действительно трудно понять, чего вы пытаетесь достичь.В любом случае, здесь есть скрипт, который динамически создает заголовки.Вероятно, вам придется настроить логику в соответствии с вашими требованиями, но она должна быть хорошей отправной точкой:

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)

Вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...