2013-04-17 13 views
7

私はSQL Serverが新しくなっています。今度は次のようなクエリを見つけました:TSQL:列名なしのascによる並べ替え

SELECT country FROM Hovercraft.Orders GROUP BY country ORDER BY ASC 

order by節に列名はありません。これは可能ですか? SSMSはいいえと言います。

イェルク

+4

[** 'ORDER BY' **句](http://msdn.microsoft.com/en-us/library/ms188385.aspx)に' order_by_expression'を入れる必要があります。しかし、なぜ***あなたはそうしたいのですか?この場合、SQL Serverはどの列を「ORDER BY」するべきですか? –

+1

このクエリはどこから届いていますか? –

+0

それは私のために働いたことはありませんでした。 –

答えて

10

それはおそらく誤植だ - あなたはを指定する必要があり、あなたがすることによって発注されているものを。これは、列名、式、または出力の列の数値です。

SELECT country FROM Hovercraft.Orders GROUP BY country ORDER BY 1 ASC 

- そう、これは、出力の最初の列(すなわちの内容によって発注になりますので、のような - それは単に列番号1を省略していること、あなたが見ているクエリは、後者の一つであった可能性が高いです。 country)。

+5

+1あなたを目標にしていませんが、これを読んでいる人には、序盤の注文はプロダクションコードでぶち壊されます - SQL Server MVP Aaron Bertrandにはなぜブログエントリがありますか:[悪い習慣から蹴る:ORDER BY ordinal] ://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/06/bad-habits-to-kick-order-by-ordinal.aspx) – Bridge

+0

ありがとう、マーク。私はただ見過ごしていないことを確かめたかっただけです。 –

1

私は@Mahmoudガマルに同意します。しかし、また、それはこのようなハック書き込むことが可能です - この場合

SELECT o.country, const_column = 1 
FROM Hovercraft.Orders o 
GROUP BY o.country 
ORDER BY const_column ASC 

を、ソートが実行されますが、行順番は変更されません。 MS SQL 2005で

:MS SQL 2012で

Proff for @Martin Smith

Proff for @Martin Smith

+1

'SELECT *、const_column = 1 FROM master..spt_values ORDER BY const_column ASC'を試したときにソートが行われません。(これはどうしても質問と関係がありません) –

+0

どのようなマイナスを設定したのか教えてください。 @JörgWeigelは「order by節に列名は与えられていませんか?」という質問をしたので、たとえば定数値をソートするクエリのみを書きました。 – Devart

+0

私はこの問題を2005年版サーバーでテストしました。 – Devart

0

これは不可能です!... by句

順序は常に列名または列番号が必要です。

あなたはこのような状況が欲しいと私に応答してください、私はあなたが動的クエリを使って作業していると思いますか、私に知らせてください。

これは不可能です。

ありがとうございました。

関連する問題