C, PHP, VB, .NET

Дневникът на Филип Петров


* Генериране на поредици от числа в Access

Публикувано на 13 февруари 2019 в раздел УКИТ.

В Microsoft Access няма оператор за генериране на поредици от числа. Затова ни се налага да ги създаваме ръчно. Нека вземем една примерна задача и да я реализираме. Дадена е таблица с периодични издания. За тях пазим уникален номер, име и период на активност - от дата на стартиране до дата на закриване. Ако датата за закриване я няма, приемаме че изданието е все още активно.

Сега искаме да генерираме списък с имената на изданията и всяка отделна година, в която те са били активни. Тоест трябва да изведем следното:

За да реализираме това ни трябва числов интервал от години - например за списание "А" ни трябва таблица с единствена колона с числата 1992, 1993, 1994 и 1995, - с който да извършим декартово произведение с името на списанието.

За да генерираме числов интервал от 0 до 9999, първо създаваме една таблица с единствена колона от целочислен тип, в която записваме цифрите от 0 до 9:

 

Създаваме заявка, в която добавяме тази таблица четири пъти - венъж за единиците, веднъж за десетиците, веднъж за стотиците и веднъж за хилядите:

Това може да се досетите, че ще извърши декартово произведение между четирите множества - тоест ще генерира общо 4*10 = 10000 записа. Сега остава на всеки един от тези записи да му дадем съответното поредно число:

Ако изпълните тази заявка, ще видите генерирани числата от 0 до 9999 - точно това, което ни трябваше. Ако сложите интервал в Criteria е ясно, че множеството ще бъде ограничено. Вече можем да решим задачата като направим декартово произведение между примерната таблица и интервалната заявка:

Подробно изразът в Criteria за този пример е:

Between Year([izdania].[start_date])
                And
        IIf(Year([izdania].[end_date]) Is Null;
            Year(Now());
            Year([izdania].[end_date])
        )

>>> От тук <<< може да изтеглите и самата база от данни с примера.

Подобни интервали често са полезни при съставяне на Crosstab заявки.

 



Добави коментар

Адресът на електронната поща няма да се публикува


*