ビューのORDER BY句の代替手段は何ですか?


12

この質問はこのサイトにある必要がありました:)

このビューを使用する場合、複数のorder byが存在する可能性があるため、ORDER BYはビューでの使用を禁止されています。

たとえばTOP 99.999999 PERCENT、この制限を回避する方法があることは知っていますが、ハッキングの方法ではなく、ベストプラクティスを知りたいと思います。

したがって、個人使用のためにデータベースにビューを作成する場合、つまりデータベースに接続し、固定およびソートされたデータのみを表示する場合、ビューを注文できない場合はどうすればよいですか?

現在、SQL Server DBには、TOPハックに関するビューがあり、よく使用していますが、間違っていると感じています。


1
なぜトップ100%ではないのですか?
ガリック

@garik- gbnのリンクを正しく理解していても、順序が保証されないため。それはもっと簡潔な間違った答えです
ジャックはtry topanswers.xyz

1
@ジャックダグラスそれは答えではなく、トップ99.999についてのコメントでした
...-garik

@garik-SQL Server 2008では、TOP 100 PERCENTは無視され、99のみを使用しています。修正されたと思いますが、私のバージョンは更新されていません。
yellowblood

1
これは技術的な制限ではありません。これは仕様です。そのため、回避策はハックのように感じられます。ビューに対してクエリで順序を設定します。順序は、データのコレクション(ビューやテーブルなど)ではなく、結果セット(クエリ出力など)に適用されます。
ニックチャマス

回答:


2

ビューは行のセットであると想定されているため、「順序付けられた」ビューのようなものはありません。固定された順序が必要な場合は、ストアドプロシージャを使用します。


これが、ビュー定義内で順序付けを強制できない理由を説明する答えです。定義上、セットには順序がありません。ただし、TOPと組み合わせた場合ORDER BY、順序はどの行が「上」であるかに影響するため、新しいセットを定義しています。そのため、ビュー定義でTOP使用できますORDER BY
ニックチャマス

9

最も外側のORDER BY のみが順序を保証します

  • 中間または内部のORDER BYは無視されます。
    これには、ビュー内のORDER BYが含まれます
  • どのテーブルにも暗黙の順序はありません
  • そのテーブルのインデックス(クラスタ化されているかどうかに関係なく)からの暗黙の順序はありません。

リンク集

ORDER BYは、クエリの最も外側のSELECTステートメントに対してのみソートされた結果を保証します。たとえば、次のビュー定義を考えてみましょう:(そして、この質問に一致する次の例)


説明をありがとう。しかし、それは私が探していた答えではありません:)ビュー内の非常に便利なORDER BYにどのような選択肢があるのか​​を見ようとしています。
yellowblood

3

ビューの出力にORDER BYを追加します。すなわち

  SELECT whatever FROM MYVIEW ORDER BY whatever

1
クラスタ化インデックスによる暗黙の順序はありません。-1。
gbn

@SqlACID-良い編集、-1の代わりに+1 :)
Jackはtry tryanswers.xyz

これは、ビューをクエリするたびにorder by句を書き換える必要があることを意味します。これは、ビュー内でorder byを使用するときに回避しようとしていることです。
イエローブラッド

dportasが言ったように、クエリのストアドプロシージャラッパーは機能しますが、おそらく探しているものは機能しません。
SqlACID

私は実際にストアドプロシージャを試しましたが、クエリや操作を行うのに十分なほど簡単で迅速ではありませんでした。えー
イエローブラッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.