none
UNION ALLの前にORDER BYで並び替えるには RRS feed

  • 質問

  • 質問させていただきます。

    SQL文でUNION ALLで2つSELECT文を結合するのですが、次のように1つのSELECT文にTOP句があるため、SELECT文結合前にBBBで並び替えをしたあとに結合したいのです。

    SELECT TOP 3 AAA, BBB FROM Tbl_A WHERE ID = 1
    (ORDER BY BBB DESC)←これを指定したい!!
    UNION ALL
    SELECT AAA, BBB FROM Tbl_A WHERE ID = 2
    ORDER BY AAA DESC

    しかしなから、個々のSELECT文にORDER BY 句をつけることはできません。
    所詮、このようなSQL文は不可能なのでしょうか?

    ご教授よろしくお願いいたします。

    2010年11月22日 9:09

回答

  • 自己レスです。

    出来ました。下記のとおりです。

    SELECT TOP 3 AAA, BBB FROM
    (SELECT TOP 10 AAA,BBBB
     FROM Tbl_A WHERE ID = 1
    ORDER BY BBB DESC) AS Tbl_AA
    UNION ALL
    SELECT AAA, BBB FROM Tbl_A WHERE ID = 2
    ORDER BY AAA DESC

    FROM句をORDER BYを含めたSELECT文をカッコで囲み、これにエイリアス指定することで最初のSELECT文が有効になりました。

    お騒がせしました。
    また、T-Yokooさん、ご協力ありがとうございました。

     

     

    • 回答としてマーク Zigen 2010年11月22日 14:57
    2010年11月22日 14:57

すべての返信

  • (SELECT TOP 3 AAA, BBB FROM Tbl_A WHERE ID = 1
    ORDER BY BBB DESC)
    UNION ALL
    SELECT AAA, BBB FROM Tbl_A WHERE ID = 2
    ORDER BY AAA DESC

    このように書けば可能かと思います。

    2010年11月22日 13:08
  • T-Yokooさん、こんばんは。

    返信ありがとうございます。

    最初のSELECT文をORDER句も含めてカッコ ( )でくくってやってみましたが、下記のエラーが表示されました。

    キーワード 'ORDER' 付近に不適切な構文があります。

    他になにか特別な指定があるのでしょうか?

    2010年11月22日 14:05
  • 自己レスです。

    出来ました。下記のとおりです。

    SELECT TOP 3 AAA, BBB FROM
    (SELECT TOP 10 AAA,BBBB
     FROM Tbl_A WHERE ID = 1
    ORDER BY BBB DESC) AS Tbl_AA
    UNION ALL
    SELECT AAA, BBB FROM Tbl_A WHERE ID = 2
    ORDER BY AAA DESC

    FROM句をORDER BYを含めたSELECT文をカッコで囲み、これにエイリアス指定することで最初のSELECT文が有効になりました。

    お騒がせしました。
    また、T-Yokooさん、ご協力ありがとうございました。

     

     

    • 回答としてマーク Zigen 2010年11月22日 14:57
    2010年11月22日 14:57