* Генериране на поредици от числа в 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 заявки.

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