Compléter les lignes manquantes

Compléter les lignes manquantes - SQL/NoSQL - Programmation

Marsh Posté le 06-07-2006 à 16:47:30    

Bonjour,
 
voila j'ai une base de ce type
 

Code :
  1. reference | annee | mois | prix
  2. kxz32     | 2006  |  1   | 32
  3. kxz32     | 2006  |  3   | 35
  4. kxz32     | 2006  |  4   | 33
  5. tu453     | 2006  |  1   | 12
  6. tu453     | 2006  |  2   | 15
  7. tu453     | 2006  |  5   | 11
  8. tu453     | 2006  |  7   | 16


 
En fait je voudrais qu'il me complete les mois manquants jusqu'au mois courant, avec comme valeur la derniere valeur trouvée pour la reférence.
J'aimerais en gros obtenir ca :
 

Code :
  1. reference | annee | mois | prix
  2. kxz32     | 2006  |  1   | 32
  3. kxz32     | 2006  |  2   | 32
  4. kxz32     | 2006  |  3   | 35
  5. kxz32     | 2006  |  4   | 33
  6. tu453     | 2006  |  1   | 12
  7. tu453     | 2006  |  2   | 15
  8. tu453     | 2006  |  3   | 15
  9. tu453     | 2006  |  4   | 15
  10. tu453     | 2006  |  5   | 11
  11. tu453     | 2006  |  6   | 11
  12. tu453     | 2006  |  7   | 16


 
Est-ce faisaible ? Si vous avez une méthode.
J'ai regardé un peu du coté du Transact SQL (je suis en SQL SERVER 2000), notamment les CURSOR, mais je ne vois pas comment faire mon test sur ma ligne.
Je pense que pour une ref, il faut dresser la liste des mois présents et ensuite s'il manque un mois (ou +) le(s) générer. Seulement comment faire ce test ?
 
Merci de votre aide.


Message édité par $man le 06-07-2006 à 16:48:26
Reply

Marsh Posté le 06-07-2006 à 16:47:30   

Reply

Marsh Posté le 07-07-2006 à 07:32:16    

ou alors rechercher le max(mois) par annee / reference
et faire une boucle :
 
De max(mois) -> 1 faire
     mois = mois -1
     insert mois
     si erreur
        mois existe (gère erreur / ne fais rien)  
     finsi
fin boucle
 
ou
 
De max(mois) -> 1 faire
     mois = mois -1
     select mois
     si n'existe pas  
        insertion mois  pour anne / reference
     finsi
fin boucle
 


Message édité par vttman2 le 07-07-2006 à 07:35:16
Reply

Marsh Posté le 07-07-2006 à 08:35:40    

Salut,
 
oui je pense que c'est une bonne idée, est-ce possible ?
J'avoue que j'arrive à géré quelques trucs avec les variables @, mais pour gérer des enregistrements ligne par ligne, je vois pas trop meme avec les cursor. Si vous aviez des exemples. Je continue d'investiguer de mon coté.
 
Merci;
:hello:

Reply

Marsh Posté le 07-07-2006 à 09:24:33    

Sinon si tu as pas de réponses dans ce forum
 
Essaie là => http://www.developpez.com/
il y aura des gros balèzes pour te répondre ;-)

Reply

Marsh Posté le 07-07-2006 à 12:08:22    

je pense qu'une simple requête sql ferais l'affaire :s
il suffit de faire plusieurs SELECT imbriqué combiné avec des UNION et tu devrais y arriver.  
 
SELECT *
FROM (SELECT ... => tout ceux qui existe
          UNION
         SELECT ... => tout ceux qui n'existe pas  
        );
 
voila mtn à toi de compléter les SELECT :D, à mon avis, dans le dernier select, tu aurais encore des imbrications de SELECT.

Reply

Marsh Posté le 07-07-2006 à 12:10:43    

Salut,
 
oui ca peut etre une bonne idée, mais comment selectionner quelque chose qui n'existe pas ?
 
Merci.

Reply

Marsh Posté le 08-07-2006 à 10:18:10    

en ORACLE tu as la table DUAL que tu permets de selectionner quelques choses à partir de rien.

Reply

Marsh Posté le 09-07-2006 à 17:46:35    

Salut,  
 
comme indiqué je suis en SQL SERVER 2000
 
Merci.

Reply

Marsh Posté le 10-07-2006 à 10:23:53    

ben je ne sais pas sur SQL SERVER :D faut demander au spécialiste SQL SERVER ... Ou tu fais une recherche sur google, suis certain que tu trouveras vite la réponse.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed