Je n'ai pas trouvé de fonction permettant de supporter ce que j'essaie d'approcher.SQL Row_Number() (Partition par ... Commande par ...) IGNORES Instruction de commande
Supposons que nous avons le tableau suivant qui contient un ordre de tri sur le terrain et certains doublons
+----------+----------+-----+-------------+-----------+ | 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 | +----------+----------+-----+-------------+-----------+
Je veux énumérer mes lignes augmentant leur valeur quand un doublon, sinon puis réinitialiser le numéro de ligne. Le résultat doit être affiché dans la colonne rn le tableau suivant si Qté est la colonne d'évaluer:
+----------+----------+-----+-------------+-----------+----+ | 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 | +----------+----------+-----+-------------+-----------+----+
J'ai essayé d'utiliser ROW_NUMBER() fonction, mais je ne peux pas obtenir les résultats que je veulent-
;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 | +----------+----------+-----+-------------+-----------+----+
L'Ordre Par est complètement ignorée, quelqu'un peut-il aider?
L'ORDER BY n'est pas ignoré. Si vous partitionnez par Qté, vous regroupez la ligne 6 avec les lignes 1-4. Vous devez essayer une approche "Gaps and Islands". Regardez la fonction LAG. –
Ce n'est pas du tout ignoré. Regardez attentivement. Vous partitionnez le résultat en fonction de la colonne 'Qty'. Par conséquent, dans la première partition, 'rn' est 1. Et dans la partition suivante,' rn' est basé sur 'Qty'. Quoi d'autre voulez-vous? – ViKiNG
Merci tab Alleman mais malheureusement cela doit être abordé en 2008 R2 base de données moteur que je spécifie dans les balises –