2012-02-23 7 views
0

私はそれを聞いている間、これは愚かな質問のように聞こえますが、私はSQLには新しく、このようなことが可能かどうかはわかりません。ストアドプロシージャでOrder Byの後に結果セットにレコードを追加することは可能ですか?

2以外の表からすべてのレコードを選択し、アルファベット順に並べ替え、最後の2つを末尾に追加したいとします。 select文でこれを行うことはできますか?それとも、テンポラリテーブルを作成してその結果セットを返す必要がありますか?

は基本的には、擬似コードでは、私はこれをしたい:事前に

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

感謝を。

答えて

4

いいえ、クエリを組み合わせるのに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; 

この2つの行を最後に配置することをご希望の場合は、注文する必要があります。

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の助けを借りて)人がサブクエリでクエリを入れて、そこでの順序を適用するキュートなトリックを参照してください、しかし、注意してください、これは策略であるかもしれません!これにより、外部クエリの順序が保証されるわけではありません。

+0

ありがとうございます。テーブルがセットアップされている方法では、それが動作するためには何も注文することはありません。天気の天気のように見える。 =) – Yatrix

+1

一時テーブルが必要な理由を説明できますか?私のクエリでは、テーブルに何も書き込まずに順序付けを行い、それを指示しました。 –

+0

私はzが何をしたのか誤解しました。だから、z = 1をjohnとmark以外のすべてのレコードに割り当てて、最後に2と3を指定してそれらを注文します。わかった。非常に賢い、アーロン。確かに、非常に賢い。もう一度、ありがとう。 – Yatrix

関連する問題