Использование строк и выражений с UNION

Иногда, вы можете вставлять константы и выражения в предложении SELECT, используемые с UNION. Это не следует строго указаниям ANSI, но это полезная и необычно используемая возможность. Константы и выражения, которые вы используете, должны встречать совместимые стандарты, которые мы выделяли ранее. Эта свойство полезно, например, чтобы устанавливать комментарии, указывающие какой запрос вывел данную строку. Предположим, что вы должны сделать отчет о том, какие продавцы производят наибольшие и наименьшие порядки по датам. Мы можем объединить два запроса, вставив туда текст, чтобы различать вывод для каждого из них.
SELECT a.snum, sname, onum, ‘Highest on’, odate FROM (Salespeople a, Orders b WHERE a.snum = b.snum AND b.amt = ( SELECT MAX (amt) FROM Orders c WHERE c.odate = b.odate )
UNION
SELECT a.snum, (sname, (onum ‘ Lowest on’, odate FROM ( Salespeople a, Orders b WHERE a.snum = b.snum AND b.amt = ( SELECT MIN (amt) FROM Orders c WHERE c.odate = b.odate );
Вывод из этой команды показывается в Рисунке 14.4.
Мы должны были добавить дополнительный пробел в строку ‘Lowest on’, чтобы сделать ее совпадающей по длине со строкой ‘Highest on’. Обратите внимание что Peel выбран при наличии и самого высокого и самого низкого ( фактически он единственный ) порядка на 5 Октября. Так как вставляемые строки двух этих запросов различны, строки не будут устранены как дубликаты.

SQL Execution Log

AND b.amt =
( SELECT min (amt) FROM Orders c
WHERE c.odate = b.odate);

1001
Peel
3008
Highest on
10/05/1990

1001
Peel
3008
Lowest on
10/05/1990

1001
Peel
3011
Highest on
10/06/1990

1002
Serres
3005
Highest on
10/03/1990

1002
Serres
3007
Lowest on
10/04/1990

1002
Serres
3010
Lowest on
10/06/1990

1003
Axelrod
3009
Highest on
10/04/1990

1007
Rifkin
3001
Lowest on
10/03/1990

Рисунок 14.4: Выбор наивысших и наинизших порядков, определяемых с помощью строк
 

‹ Объединение многочисленных запросов в один
Вверх
Использование UNION с ORDER BY ›

Айтистанция
Добавить комментарий

Adblock
detector