Прайс Кевин Т.
Шрифт:
Выполнение вычислений в запросах
В строках запроса допускается выполнение вычислений. Для этого нужно просто заменить имя поля в предложении SELECT именем арифметического выражения. Допустим, вам нужно создать запрос для вычисления налога с продаж для складских запасов (сведения о которых хранятся в таблице tblItem). В приведенном ниже запросе SQL вычисляется налог с продаж с учетной ставкой 7,5% для каждого товара.
После выполнения этого запроса будут получен показанный ниже результат.
| ID | Name | Price | SalesTax |
|---|---|---|---|
| 1 | Rubber Chicken | 5.99 | 0.44925 |
| 2 | Hand Buzzer | 1.39 | 0.10425 |
| 3 | Stink Bomb | 1.29 | 0.09675 |
| 4 | Disappearing Penny Magic Trick | 3.99 | 0.29925 |
| 5 | Invisible Ink | 2.29 | 0.17175 |
| 6 | Loaded Dice | 3.49 | 0.26175 |
| 7 | Whoopee Cushion | 5.99 | 0.44925 |
Поскольку в этих вычислениях фигурируют деньги, конечный результат нужно округлить до двух десятичных знаков. К счастью, в SQL Server для этого предусмотрена специальная функция ROUND, которая позволяет очень легко выполнить это. Обычно ее используют с указанием двух параметров: собственно десятичного числа и точности, выраженной в виде количества знаков после запятой. Вот как выглядит запрос с функцией ROUND:
Результат выполнения этого запроса приведен ниже.
| Name | Retail Price | PriceWithTax |
|---|---|---|
| Rubber Chicken | 5.99 | 6.44 |
| Hand Buzzer | 1.39 | 1.49 |
| Stink Bomb | 1.29 | 1.39 |
| Disappearing Penny Magic Trick | 3.99 | 4.29 |
| Invisible Ink | 2.29 | 2.46 |
| Loaded Dice | 3.49 | 3.75 |
| Whoopee Cushion | 5.99 | 6.44 |
Определение псевдонимов с использованием предложения AS
Из предыдущего примера ясно, что существует возможность определения псевдонимов (alias), т.е. переименования полей в запросе. Это может быть вызвано следующими причинами:
• в основной таблице имена полей могут быть громоздкими, а в результирующем наборе должны быть понятными и простыми;
• запрос создает столбец, который заполняется в результате некоторых вычислений или операций подведения итогов, а новому столбцу обязательно нужно задать имя.
Независимо от причины, это легко сделать в запросе SQL с помощью предложения AS. Например, вам нужно выполнить ряд сложных вычислений для определения суммарной стоимости отгруженных товаров ExtendedPrice. Для этого напишите следующий код SQL:
Этот запрос возвращает приведенный ниже результирующий набор.
| ItemID | Quantity | RetailPrice | ExtendedPrice |
|---|---|---|---|
| 1 | 1 | 5.99 | 5.99 |
| 2 | 2 | 1.39 | 2.78 |
| 5 | 3 | 2.29 | 6.87 |
| 4 | 2 | 3.99 | 7.98 |
| 7 | 1 | 5.99 | 5.99 |
Обратите внимание, что данные в поле ExtendedPrice не хранятся в базе данных, они вычислены "на лету".
Запросы, которые группируют данные и подводят итоги
Часто требуется создавать запросы, подобные следующему: "Сколько заказов поступило вчера?" При этом вас не интересует, кто оформил заказ, вы только хотите знать количество вчерашних заказов. Это можно сделать, используя запросы, группирующие итоговые функции.