Можно ли добавить записи в результирующий набор после Order By в хранимой процедуре? - PullRequest
0 голосов
/ 23 февраля 2012

Это звучит как глупый вопрос, пока я его задаю, но я новичок в SQL и не уверен, что что-то подобное возможно

Я хочу выбрать все записи из таблицы, кроме 2, упорядочить их в алфавитном порядке и затем добавить последние две в конец. Могу ли я сделать это в операторе select или мне нужно создать временную таблицу и вернуть из нее набор результатов?

По сути, в псевдокоде я хочу сделать это:

select
  firstname,
  lastname, 
  otherdata
  from People
    where firstname != 'john' or 'mark'
      order by firstname
  add John and Mark

Заранее спасибо.

1 Ответ

4 голосов
/ 23 февраля 2012

Нет, вам нужно использовать UNION для объединения запросов, и ORDER BY должен стоять последним.например,

SELECT firstname, lastname, otherdata
 FROM dbo.People
 WHERE firstname NOT IN ('john', 'mark')
UNION ALL
SELECT 'John', NULL, NULL
UNION ALL 
SELECT 'Mark', NULL, NULL
ORDER BY firstname;

Если вы хотите разместить эти два ряда последними, то вам нужно заказать что-то еще, например:

SELECT firstname, lastname, otherdata, z = 1
 FROM dbo.People
 WHERE firstname NOT IN ('john', 'mark')
UNION ALL
SELECT 'John', NULL, NULL, z = 2
UNION ALL 
SELECT 'Mark', NULL, NULL, z = 3
ORDER BY z, firstname;

Вы можете увидеть милые трюки, где люди будут ставитьзапросите в подзапросе и примените там заказ (с помощью TOP), но будьте осторожны, это уловка!Это не будет гарантировать порядок внешнего запроса.

...