是否可以在存储过程中的Order By之后将记录添加到结果集中?

时间:2012-02-23 19:32:16

标签: sql sql-server-2005 stored-procedures

当我问它时,这听起来像个愚蠢的问题,但我是SQL的新手,不确定这样的事情是否可行。

我想从表中选择除2之外的所有记录,按字母顺序排序,然后将最后两个追加到末尾。我可以在select语句中执行此操作,还是必须创建临时表并从中返回结果集?

基本上,在伪代码中,我想这样做:

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

提前致谢。

1 个答案:

答案 0 :(得分:4)

不,您需要使用UNION来组合查询,ORDER BY必须最后。 e.g。

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的帮助下),但要注意,这是一个诡计!这不保证外部查询的排序方式。