Bonjour,
Je travaille sur les données un peu pourries d'un ERP franchement nul pour alimenter un datamart qui fournit un cube.
(SQL Server 2005)
Soit une table STOCK comprenant:
Item......NumEntrée.....Qté
-------..----------......-----
A..........1..................5
B..........2..................3
C..........3..................2
Soit une table Entrées comprenant:
NumEntrée.....Date
----------.....-----------
1.................2010/01/01
2.................2010/02/01
3.................2010/03/01
Pour calculer mes stocks à date j'utilise (avec satisfaction depuis 5 ans) la requête suivante:
Qui me donne le résultat suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Select Item, NumEntrée, Qté, isnull(date,getdate()) from stock left outer join entrées on stock.numentrée = entrées.numentrée
Item......NumEntrée....Qté......Date
-------..----------...-----.....-----------
A......................1......5.......2010/01/01
B......................2......3.......2010/02/01
C......................3......2.......2010/03/01
Un intégrateur Fou a vérolé la table Entrée. Je me retrouve avec une table entrée doublonnée:
NumEntrée..........Date
----------..........-----------
1......................2010/01/01
2......................2010/02/01
2......................2010/02/20
3......................2010/03/01
Et ma requête stock à date me retourne:
Item......NumEntrée.....Qté.......Date
-------..----------..-----......-----------
A......................1......5.......2010/01/01
B......................2......3.......2010/02/01
B......................2......3.......2010/02/20
C......................3......2.......2010/03/01
Je tourne et retourne le problème depuis longtemps et ne trouve pas de solution pour résoudre ce soucis sans reprendre complètement ma requête (qui est bien sur beaucoup plus complexe que ce qui est affiché) ce qui me prendrait beaucoup de temps.
La solution la + simple que j'ai trouvé est
Mais cela augmenterait, je pense, considérablement les temps d'extraction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Select Item, NumEntrée, Qté, isnull(select max(date) from entrées where stock.numentrée = entrées.numentrée,getdate()) from stock
Auriez vous une autre solution ?
Partager