2017-07-11 1 views
0

でオーダーを再私は(100のレコードの合計を返す)注文番号で最新の100件のレコードを選択する必要があり、その後、fleld1で上位n個の順序を選択します。フィールド2

select top 100 orderNo, orderDate, orderTypeName, field1, field2, name, address 
from orders 
where dispatched = 1 
order by orderNo desc 

(ORDERNOがシーケンシャルとあります最も高い数字は最新の注文です)。

これは私に最新の100件の注文を受け取ります。しかし、最近の100件の注文でOrderTypeNameを並べ替えると、各OrderTypeNameが一緒に表示されます。

これは、上位100レコードを選択する必要のない他のクエリでも機能しますが、もちろんOrderTypeNameをソートすると、最新の100レコードの選択が停止します。

どうすればいいですか?私はGoogleを検索しようとしましたが、私は実際に何を検索するか分からない。 (私は - 「トップnを選択してからリゾートの結果を試しました - 喜びはありませんでした)。

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

+1

あなたはorderTypeNameあたり100件の最新の注文を取得したいですか? –

+0

いいえ - 直近の100件の注文のみ。その後、私はそれらを持っている - OrderTypeName、orderNo順序でリストします。どうも。 – niico

答えて

3

は、サブクエリの内側のクエリを入れて、その後ORDER BY orderTypeNameを追加します。

SELECT * 
FROM (
    SELECT TOP(100) 
     orderNo, orderDate, orderTypeName, field1, field2, name, address 
    FROM orders 
    WHERE dispatched = 1 
    ORDER BY oderNo DESC 
) t 
ORDER BY orderTypeName, orderNo 
+0

これは100以上の行を返します。 – scsimon

+0

@scsimonは 'TOP'節を忘れました。それを指摘してくれてありがとう。 –

+0

心配する必要はありません。 – scsimon

3

あなたはROW_NUMBERを使用し、以下のように順に行うことができます。

Select * from (
Select orderNo, orderDate, orderTypeName, field1, field2, [name], [address], 
    RowN=Row_Number() over (order by OrderNo desc) 
from orders 
where dispatched = 1 
) a 
Where a.RowN <= 100 
order by OrderTypeName 
関連する問題