Ich konnte keine Funktion finden, um zu unterstützen, was ich versuche, zu nähern.SQL Row_Number() (Partition von ... Ordnen nach ...) IGNORES Bestellanweisung
Nehmen wir an, wir die folgende Tabelle haben, die ein Feld Sortierreihenfolge und bestimmte Duplikate enthält
+----------+----------+-----+-------------+-----------+ | UniqueId | Id | Qty | RetailPrice | SortOrder | +----------+----------+-----+-------------+-----------+ | 3124 | 92361725 | 25 | 269.99 | 1 | | 2627 | 92361725 | 25 | 269.99 | 2 | | 7635 | 92361725 | 25 | 269.99 | 3 | | 8732 | 92361725 | 25 | 269.99 | 4 | | 3791 | 92361725 | 20 | 269.99 | 5 | | 4328 | 92361725 | 25 | 269.99 | 6 | +----------+----------+-----+-------------+-----------+
ich ihren Wert meine Zeilen zu erhöhen aufzuzählen werden soll, wenn ein Duplikat gefunden wird, wenn nicht, dann die Zeilennummer zurückgesetzt. Das Ergebnis muss in der Spalte rn gezeigt werden die folgende Tabelle, wenn Menge die Spalte zu bewerten:
+----------+----------+-----+-------------+-----------+----+ | UniqueId | Id | Qty | RetailPrice | SortOrder | rn | +----------+----------+-----+-------------+-----------+----+ | 3124 | 92361725 | 25 | 269.99 | 1 | 1 | | 2627 | 92361725 | 25 | 269.99 | 2 | 2 | | 7635 | 92361725 | 25 | 269.99 | 3 | 3 | | 8732 | 92361725 | 25 | 269.99 | 4 | 4 | | 3791 | 92361725 | 20 | 269.99 | 5 | 1 | | 4328 | 92361725 | 25 | 269.99 | 6 | 1 | +----------+----------+-----+-------------+-----------+----+
I ROW_NUMBER() Funktion zu nutzen versucht, aber ich kann nicht die Ergebnisse, die ich bekommen
wollen, ist;WITH Table1 AS(
SELECT 3124 UniqueId,92361725 Id, 25 Qty, 269.99 RetailPrice, 1 SortOrder UNION ALL
SELECT 2627 UniqueId,92361725 Id, 25 Qty, 269.99 RetailPrice, 2 SortOrder UNION ALL
SELECT 7635 UniqueId,92361725 Id, 25 Qty, 269.99 RetailPrice, 3 SortOrder UNION ALL
SELECT 8732 UniqueId,92361725 Id, 25 Qty, 269.99 RetailPrice, 4 SortOrder UNION ALL
SELECT 3791 UniqueId,92361725 Id, 20 Qty, 269.99 RetailPrice, 5 SortOrder UNION ALL
SELECT 4328 UniqueId,92361725 Id, 25 Qty, 269.99 RetailPrice, 6 SortOrder
)
SELECT UniqueId, Id, Qty, RetailPrice, SortOrder,
ROW_NUMBER() OVER (PARTITION BY Qty ORDER BY SortOrder) rn
FROM Table1
+----------+----------+-----+-------------+-----------+----+ | UniqueId | Id | Qty | RetailPrice | SortOrder | rn | +----------+----------+-----+-------------+-----------+----+ | 3791 | 92361725 | 20 | 269.99 | 5 | 1 | | 3124 | 92361725 | 25 | 269.99 | 1 | 1 | | 2627 | 92361725 | 25 | 269.99 | 2 | 2 | | 7635 | 92361725 | 25 | 269.99 | 3 | 3 | | 8732 | 92361725 | 25 | 269.99 | 4 | 4 | | 4328 | 92361725 | 25 | 269.99 | 6 | 5 | +----------+----------+-----+-------------+-----------+----+
den Auftrag durch völlig ignoriert, kann jemand helfen?
Die ORDER BY wird nicht ignoriert. Wenn Sie nach Menge partitionieren, gruppieren Sie Zeile 6 mit den Zeilen 1-4. Sie müssen einen "Lücken und Inseln" -Ansatz versuchen. Sehen Sie sich die LAG-Funktion an. –
Es wird überhaupt nicht ignoriert. Genau beobachten. Sie partitionieren das Ergebnis basierend auf der Spalte "Menge". Daher ist "rn" in der ersten Partition 1. Und in der nächsten Partition basiert "rn" auf "Qty". Was willst du noch? – ViKiNG
Danke Tab Alleman aber leider muss dies in 2008 R2 Datenbank Engine angegangen werden, wie ich in den Tags –