2017-07-11 1 views
0

ich brauche die letzten 100 Datensätze von Auftragsnummer (zurückkehr insgesamt 100 Datensätze) auswählen:durch fleld1, dann erneut, um durch field2

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

(OrderNo sequentiell ist und die höchste Nummer ist die letzte Bestellung).

Dies bringt mir die neuesten 100 Bestellungen. Aber ich möchte, dass die letzten 100 Aufträge nach OrderTypeName sortiert werden, damit jeder OrderTypeName zusammen aufgelistet wird.

Dies funktioniert in anderen Abfragen, die nicht die Top 100 Datensätze auswählen müssen - aber natürlich hier, wenn ich zuerst OrderTypeName sortiere, hört es auf, die letzten 100 Datensätze auszuwählen.

Wie kann ich das tun? Ich habe versucht, Google zu suchen, aber ich weiß nicht einmal wirklich, wonach ich suchen soll. (Ich habe versucht - 'Top n' und dann resort Ergebnisse zum Beispiel - keine Freude).

Danke.

+1

Haben Sie die 100 letzten Bestellungen pro orderTypeName erhalten möchten ? –

+0

Nein - nur die 100 letzten Bestellungen. Dann, sobald ich diese habe - Liste dann in OrderTypeName, OrderNo Order. Danke. – niico

Antwort

3

Setzen Sie die Abfrage innerhalb einer Unterabfrage fügen Sie dann 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

Dies würde mehr als 100 Zeilen zurückbringen. – scsimon

+0

@scsimon hat die TOP-Klausel vergessen. Danke, dass du es aufgezeigt hast. –

+0

keine Sorgen Kumpel. – scsimon

3

können Sie Row_Number verwenden und wie unten, um zu tun:

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 
Verwandte Themen