SQL — список из начального и конечного рядов

У меня есть таблица, в которой есть серия элементов отчетности, например:

Reporting Name  Starting Number         Ending Number
AW              965845                  -
GRT             6700                    6705
QEF             2011                    -

Я надеюсь вывести следующую таблицу ниже в Access предпочтительно, но я могу перевести с SQL на Access, если это необходимо.

Output:

Combined Ref
AW 965845
GRT 6700
GRT 6701
GRT 6702
GRT 6703
GRT 6704
GRT 6705
QEF 2011

Не могли бы вы мне помочь?


person user2998025    schedule 28.03.2014    source источник
comment
@attila Хорошо, поэтому я боялся такого ответа ... так что насчет решения на SQL, которое берет серию элементов отчетности и создает возможные комбинации для Access, которые выглядят как выходные данные.   -  person user2998025    schedule 29.03.2014


Ответы (1)


Единственный способ узнать, как это сделать в Access, - использовать таблицу подсчета. Эта таблица будет содержать все возможные числа, которые вам могут понадобиться, от 1 до ?

create table tallynumbers (nbrs INTEGER)

Вы можете довольно легко загрузить это через Excel.

Тогда вы можете просто присоединиться следующим образом:

select ReportingName, nbr
from reporting_items as ri, tallynumbers as tn
where tn.nbr between ri.[Starting Number] and iif(IsNull(ri.[Ending Number]),ri.[Starting Number],ri.[Ending Number])

ОБНОВЛЕНИЕ Если вы можете сделать все это в SQL Server 2005+, вот еще один вариант для вас

Вот таблица отчетов

create table reports (ReportingName varchar(10), StartingNumber int, EndingNumber int)

Теперь заполните его примерными значениями.

insert into reports
values ('AW', 965845, null),
('GRT', 6700, 6705),
('QEF', 2011, null)

Теперь для рекурсивного CTE, чтобы получить его в нужном формате

;with RecurReports
as
(

  select ReportingName, StartingNumber as nbr, 
     coalesce(EndingNumber,startingnumber) as enbr
  from reports
  union all select rr.ReportingName, nbr +1, enbr
  from reports r 
  inner join RecurReports rr 
     on r.ReportingName=rr.ReportingName
  where nbr < enbr
)
select ReportingName, nbr as Number from RecurReports

Вот скрипт SQL: http://www.sqlfiddle.com/#!6/91137 /1

person attila    schedule 28.03.2014
comment
Я согласен с этим ответом. на сервере SQL или других платформах вы можете использовать ROWNUMBER или временную таблицу с автоинкрементом, но с доступом вы сильно ограничены. - person crthompson; 29.03.2014
comment
@attila Хорошо, поэтому я боялся такого ответа ... так что насчет решения на SQL, которое берет серию элементов отчетности и создает возможные комбинации для Access, которые выглядят как выходные данные. (не знаю, куда написать, чтобы привлечь ваше внимание). - person user2998025; 29.03.2014
comment
@attila Я думал создать специальную итоговую таблицу после импорта в SQL начального и конечного рядов, которые мне нужны, а затем отправить эту итоговую таблицу бизнес-пользователю, которому она нужна для работы в Access. - person user2998025; 31.03.2014
comment
Вы хотите иметь возможность вывести результат в Access? Означает ли это, что вы можете выполнять обработку в SQL Server? Если это так, то рекурсивный CTE будет вариантом вместо таблицы подсчета. - person attila; 31.03.2014
comment
Я обновил ответ с возможностью рекурсивного CTE и без таблицы подсчета. Это предполагает SQL Server 2005+. - person attila; 01.04.2014