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