Зачем нужно использовать расчетные поля? Как правило, информация в БД представлена в разрезе отдельных фрагментов, так как легче структуризировать данные и оперировать ими. Однако нам часто нужно использовать не отдельные части данных, а уже объединенную и обработанную информацию. Например, часто необходимо сочетать имя и фамилию клиентов, сочетать элементы адресов, которые находятся в разных столбцах таблицы, обрабатывать текст и отдельные слова, буквы и символы, суммировать общую стоимость покупки, отображать статистику по информации, находящейся в БД. Данные обычно хранятся отдельными "кусками", что требует их дополнительной обработки на стороне клиентской программы. Однако есть возможность получать уже обработанную информацию посредством СУБД. Именно в этом случае помогают расчетные поля. Они автоматически создаются при выполнении запроса и имеют вид и свойства обычных столбцов, уже имеющихся в таблице. Единственное отличие состоит в том, что физически расчетных полей нет, поэтому они не занимают дополнительное место в БД, а временно существуют в "оперативной памяти" СУБД. Преимуществом выполнения операций на стороне СУБД является быстрота обработки данных.
Одним из способов использования расчетных полей является выполнение математических операций над выбранными данными. Давайте на примере рассмотрим как это происходит, использовав снова нашу таблицу Sumproduct. Предположим, на нужно рассчитать среднюю цену приобретения каждого товара. Для этого нужно переделить колонку Amount (сумма) на Quantity (количество):
Run SQLSELECT DISTINCT Product, Amount/Quantity
FROM Sumproduct
Как видим, СУБД отобрала все наименования товаров и отразила их среднюю стоимость в отдельном столбце, созданном при выполнении запроса. Также можно заметить, что мы использовали дополнительный оператор DISTINCT, который нужен нам для отображения уникальных названий товаров (без него мы бы получили дублирование записей).
В предыдущем примере мы рассчитывали среднюю стоимость покупки каждого товара и отразили значение в расчетном столбце. Однако в дальнейшем, нам будет неудобно обращаться к этому полю, поскольку его название является неинформативным для нас (СУБД дала название полю - Expr1001). Однако мы можем назвать поле самостоятельно, заранее указав его название в запросе, то есть дать псевдоним. Давайте перепишем предыдущий пример и укажем псевдоним для расчетного поля:
Run SQLSELECT DISTINCT Product, Amount/Quantity AS AvgPrice
FROM Sumproduct
Видимо, наше расчетное поле получило название AvgPrice. Для этого мы использовали оператор AS, после которого указали необходимое название. Следует отметить, что в SQL поддерживаются только основные математические операции: добавление (+), вычитание (-), умножение (*), деление (/). Также для смены очередности выполнения операции можно использовать круглые скобки.
Часто псевдонимы используют не только чтобы называть расчетные поля, но и для переименования действующих. Это может быть необходимым, если действующее поле имеет длинное название или название не достаточно информативно.
Помимо математических операций, мы также можем сочетать текст и выводить его в отдельном поле. Давайте рассмотрим, как можно осуществить склеивание (конкатенацию) текста. Для соединения текста из разных колонок в MS Access используется оператор "плюс" (+), например:
Run SQLSELECT Month + ' ' + Product AS NewField, Quantity
FROM Sumproduct
В этом примере мы соединили значение двух столбцов и вывели результат в новое поле NewField.