Грубер Мартин
Шрифт:
Таблица 7.2: Вставка символов в ваш вывод
Обратите внимание что пробел перед процентом вставляется как часть строки. Эта же самая особенность может использоваться чтобы маркировать вывод вместе с вставляемыми комментариями. Вы должны помнить, что этот же самый комментарий будет напечатан в каждой строке вывода, а не просто один раз для всей таблицы. Предположим что вы генерируете вывод для отчета который бы указывал число порядков получаемых в течение каждого дня. Вы можете промаркировать ваш вывод (см. Таблицу 7.3 ) сформировав запрос следующим образом:
SELECT ' For ', odate, ', there are ',
COUNT (DISTINCT onum ), 'orders.'
FROM Orders
GROUP BY odate;
Грамматической некорректности вывода, на 5 Октября, невозможно избежать не создав запроса, еще более сложного чем этот. (Вы будете должны использовать два запроса с UNION, который
SELECT 'For', odate, ', ' there are ' ,
COUNT (DISTINCT onum), ' orders '
FROM Orders GROUP BY odate;
odate | ||||
For | 10/03/1990 , | there are | 5 | orders. |
For | 10/04/1990 , | there are | 2 | orders. |
For | 10/05/1990 , | there are | 1 | orders. |
For | 10/06/1990 , | there are | 2 | orders. |
Таблица 7.3: Комбинация текста, значений поля, и агрегатов
мы будем описывать в Главе 14. ) Как вы можете видеть, одиночный неизменный комментарий для каждой строки таблицы может быть очень полезен, но имеет ограничения. Иногда изящнее и полезнее, произвести один ком ментарий для всего вывода в целом, или производить свой собственный комментарии для каждой строки.
Различные программы использующие SQL часто обеспечивают специальные средства типа генератора отчетов( например Report Writer), которые разработаны чтобы форматировать и совершенствовать вывод. Вложенный SQL может также эксплуатировать возможности того языка в который он вложен. SQL сам по себе интересен прежде всего при операциях с данными. Вывод, по существу, это информация, и программа использующая SQL может часто использовать эту информацию и помещать ее в более привлекательную форму. Это, однако, вне сферы самой SQL.
Как мы подчеркивали, таблицы - это неупорядоченные наборы данных, и данные которе выходят из их, не обязательно появляются в какой-то определенной последовательности. SQL использует команду ORDER BY чтобы позволять вам упорядочивать ваш вывод. Эта команда упорядочивает вывод запроса согласно значениям в том или ином количестве выбранных столбцов. Многочисленые столбцы упорядочиваются один внутри другого, также как с GROUP BY, и вы можете определять возрастание (ASC ) или убывание (DESC ) для каждого столбца. По умолчанию установлено - возростание. Давайте рассмотрим нашу таблицу порядка приводимую в порядок с помощью номера заказчика (обратите внимание на значения в cnum столбце):
SELECT *
FROM Orders
ORDER BY cnum DESC;
Вывод показывается в Рисунке 7.4.
SELECT * FROM Orders ORDER BY cnum DESC;
onum | amt | odate | cnum | snum |
3001 | 18.69 | 10/03/1990 | 2008 | 1007 |
3006 | 1098.16 | 10/03/1990 | 2008 | 1007 |
3002 | 1900.10 | 10/03/1990 | 2007 | 1004 |
3008 | 4723.00 | 10/05/1990 | 2006 | 1001 |
3011 | 9891.88 | 10/06/1990 | 2006 | 1001 |
3007 | 75.75 | 10/04/1990 | 2004 | 1002 |
3010 | 1309.95 | 10/06/1990 | 2004 | 1002 |
3005 | 5160.45 | 10/03/1990 | 2003 | 1002 |
3009 | 1713.23 | 10/04/1990 | 2002 | 1003 |
3003 | 767.19 | 10/03/1990 | 2001 | 1001 |
Таблица 7. 4: Упорядочение вывода с помощью убывания поля
Мы можем также упорядочивать таблицу с помощью другого столбца, например с помощью поля amt, внутри упорядочения поля cnum. (вывод показан в Таблице 7.5 ):
SELECT *
FROM Orders
ORDER BY cnum DESC, amt DESC;
SELECT * FROM Orders
ORDER BY cnum DESC, amt DESC;
onum | amt | odate | cnum | snum |
3006 | 1098.16 | 10/03/1990 | 2008 | 1007 |
3001 | 18.69 | 10/03/1990 | 2008 | 1007 |
3002 | 1900.10 | 10/03/1990 | 2007 | 1004 |
3011 | 9891.88 | 10/06/1990 | 2006 | 1001 |
3008 | 4723.00 | 10/05/1990 | 2006 | 1001 |
3010 | 1309.95 | 10/06/1990 | 2004 | 1002 |
3007 | 75.75 | 10/04/1990 | 2004 | 1002 |
3005 | 5160.45 | 10/03/1990 | 2003 | 1002 |
3009 | 1713.23 | 10/04/1990 | 2002 | 1003 |
3003 | 767.19 | 10/03/1990 | 2001 | 1001 |