Bonjour,
Je dois dans le cadre d'une extraction de données d'une base A à une base B faire une requete qui donnerait

tableA

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
item           Commande     Qty
------         --------------    --------- 
1                 1                   20
1                 1                   30
1                 2                   200
1                 2                   3
1                 2                   10
2                 17                 20
3                 22                 1000
3                 22                 2000
tableB

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
item           Commande     Qty          Num_Ligne
------         --------------    ---------     -------------
1                 1                   20              1
1                 1                   30              2
1                 2                   200            1
1                 2                   3                2
1                 2                   10              3
2                 17                 20              1
3                 22                 1000           1
3                 22                 2000           2
Une des idées que j'ai eu est
ETAPE 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
INSERT INTO TABLEB ( Item, Commande, Qty, Num_Ligne)
(SELECT Item, Commande, Qty, 0 FROM TABLEA )
ETAPE2

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
UPDATE TABLEB
SET Num_Ligne = B2.Num_Ligne
FROM TABLEB AS B1 INNER JOIN 
         (Select Item, Commande, (max(Num_Ligne) + 1) AS Num_Ligne
          FROM TABLEB
          GROUP BY Item, Commande) AS B2 
         ON  B1.Item=B2.Item AND B1.Commande=B2.Commande
WHERE Num_Ligne = 0
Ce qui donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
item           Commande     Qty          Num_Ligne
------         --------------    ---------     -------------
1                 1                   20              1
1                 1                   30              1
1                 2                   200            1
1                 2                   3                1
1                 2                   10              1
2                 17                 20              1
3                 22                 1000           1
3                 22                 2000           1
Bon je me doute bien pourquoi cette méthode ne marche pas mais je vois pas du tout comment faire pour que ca marche... mis à part peut etre une procedure stockée avec un curseur.

enfin je suis preneur de tout en 1, 2, 3 requetes s'il le faut
Merci d'avance

Loic