3

ADS v10 ベータ版を使用しています。順序付けられた結果セットを数えようとしています。

1) ネストされたクエリでの ORDER BY。いくつかの計算にはネストされた SELECT を使用する必要があります。

SELECT Name, Value, ROWNUM() FROM (SELECT * FROM MainTable WHERE Value > 0 ORDER BY Value) a

そして、私は得ています

期待される字句要素が見つかりません: )
テーブルの解析中に問題が発生しました
FROM キーワードの後の名前
SELECT ステートメント。

ORDER BY を削除すると、すべてが正常に機能します。ヘルプでサンプルを見つけましたが、私のクエリのように見えます (実際にはもっと複雑です):

SELECT * FROM (SELECT TOP 10 empid, fullname FROM branch1 ORDER BY empid) a UNION SELECT empid, fullname FROM branch2 ORDER BY empid

2) ORDER BY+ ROWNUM(). 上記の例では、ネストされたクエリを使用して、順序付けられた行を数値化しました。ネストされたクエリを回避する機会はありますか? SQL Server では、次のようなことができます。

SELECT Name, Value, ROW_NUMBER() OVER(ORDER BY Value) FROM MainTable WHERE Value > 1 ORDER BY Value

ご意見をお聞かせください。ありがとう。

4

2 に答える 2

5

ORDER BY をサブクエリの外に移動する必要があると思います。

SELECT Name, Value, ROWNUM() FROM 
  (SELECT * FROM MainTable WHERE Value > 0 ) a ORDER BY Value

順序付けられた結果セットにrownum()を適用したい場合(今朝は少し遅いです)、次のようなものを使用する必要があるかもしれません:

SELECT Name, Value, ROWNUM() FROM 
  (SELECT top 100 PERCENT * FROM MainTable WHERE Value > 0 order by value ) a

実際に結果を変更しない限り、サブクエリの ORDER BY は許可されていないと思います...ただし、この場合は許可する必要があるようです。

于 2010-04-26T12:36:04.640 に答える
0

ステートメントでエイリアスを使用して、わかりやすくし、おそらく問題を解決します。

それよりも:

SELECT Name, Value, ROWNUM() 
FROM (SELECT * FROM MainTable WHERE Value > 0 ORDER BY Value) a

使用する

SELECT a.Name, a.Value, ROWNUM() 
FROM (SELECT mt.* FROM MainTable mt WHERE mt.Value > 0 ORDER BY mt.Value) a

value問題は、句のフィールドが混乱していることである可能性がありますorder by。つまり、1番目または2番目のどちらのテーブルから取得するかがわかりません。

于 2010-04-26T12:16:11.383 に答える