Précédent   Forum du club des développeurs et IT Pro > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/12/2012, 12h07   #1
EPH69
Invité de passage
 
Homme
Conseil - Consultant en systèmes d'information
Inscription : décembre 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information

Informations forums :
Inscription : décembre 2012
Messages : 4
Points : 0
Points : 0
Par défaut Fusionner des valeurs d'une table

Débutant en SQL, et malgré maintes recherches, je n'ai pas réussi à trouver la solution à ce prb :

J'ai une table nommée modele composée des colonnes code_modele, nom_modele

Lorsque le nom_modele a des code_modele différents, j'aimerais les fusionner pour qu'il ne reste qu'un code_modele (et pas supprimer ces "doublons" car j'ai des informations de vente et d'achat sur chacun des modeles (ex:facture en cours ce qui m’empêche toute suppression)

ex:
code_modele nom_modele
1000555 lampo
1000159 lampo

Résultat attendu:
ne garder que le 1000159 et que mes informations vte/achat sur le 1000555 soient associées au 1000159

Merci de votre aide
EPH69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 14h27   #2
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 666
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 666
Points : 25 514
Points : 25 514
Envoyer un message via MSN à CinePhil
Quel est le critère qui détermine que tu vas garder 1000159 et non pas l'autre ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 10h55   #3
EPH69
Invité de passage
 
Homme
Conseil - Consultant en systèmes d'information
Inscription : décembre 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information

Informations forums :
Inscription : décembre 2012
Messages : 4
Points : 0
Points : 0
Bonjour CinePhil,

Merci de t'intéresser à ce sujet.
En réalité aucun critère particulier. 1000159 était le premier code attribué à ce modèle, 1000555 ne devrait pas exister, il a été créé sans vérifier que le modèle Lampo existait déjà.

Sur les 2 codes, il y a des mouvements Achat / Vte et des factures en cours.

Dans l'attente de ta réponse ou complément d'info, je te souhaite de bonnes fêtes.

Re-

Autre solution si c possible :

modifier le code 1000555 en 1000159 si l'historique est conservé. Mais là aussi, je n'ai rien trouvé dans les tutoriels.

Slts
EPH69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 11h23   #4
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 666
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 666
Points : 25 514
Points : 25 514
Envoyer un message via MSN à CinePhil
Donne la description complète de ta table.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 15h05   #5
islamov2000
Membre chevronné
 
Avatar de islamov2000
 
Homme islamov islamov
Ingénieur d'études & developpement en informatique
Inscription : septembre 2007
Messages : 465
Détails du profil
Informations personnelles :
Nom : Homme islamov islamov
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur d'études & developpement en informatique
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 465
Points : 642
Points : 642
Envoyer un message via Yahoo à islamov2000 Envoyer un message via Skype™ à islamov2000
Puisque les deux articles sont identiques, je propose de faire une petite
modification des données si et seulement si les informations qui concernent ces articles sont aussi indentiques pour ne pas avoir perdu l'historique.

Comment faire?

Il faut penser aux tables liées à la table en question.
__________________
d'avoir Pensé à voter positivement pour ceux qui vous ont aidés.
islamov2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 14h28   #6
Rymaya
Membre actif
 
Femme Rym Ayari
Consultante BI
Inscription : mars 2011
Messages : 225
Détails du profil
Informations personnelles :
Nom : Femme Rym Ayari
Localisation : Tunisie

Informations professionnelles :
Activité : Consultante BI
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2011
Messages : 225
Points : 150
Points : 150
Si j'ai bien compris vous avez :
ex:
code_modele nom_modele MontantA/V
1000555 lampo 200
1000159 lampo 500

Comme sortie vous voulez avoir

code_modele nom_modele MontantA/V
1000159 lampo 700

C'est bien ça??
Rymaya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 16h48   #7
punkoff
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 2 204
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 2 204
Points : 3 562
Points : 3 562
Citation:
Envoyé par EPH69 Voir le message
En réalité aucun critère particulier. 1000159 était le premier code attribué à ce modèle, 1000555 ne devrait pas exister, il a été créé sans vérifier que le modèle Lampo existait déjà.
Bonjour,

Si vous ne donnez pas une règle afin de pouvoir identifier quel code à priorité sur un autre code on ne pourra pas le deviner.

A partir de là le problème n'a pas de solution mise à part une reprise manuelle au cas par cas.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/01/2013, 10h23   #8
EPH69
Invité de passage
 
Homme
Conseil - Consultant en systèmes d'information
Inscription : décembre 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information

Informations forums :
Inscription : décembre 2012
Messages : 4
Points : 0
Points : 0
Par défaut Fusionner les valeurs d'une table

En réponse à CinePhil, le script de la table en pj
Fichiers attachés
Type de fichier : doc script table modele.doc (24,0 Ko, 2 affichages)
EPH69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 10h46   #9
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 666
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 666
Points : 25 514
Points : 25 514
Envoyer un message via MSN à CinePhil
Je ne vois aucune colonne de date ni de clé primaire basée sur une séquence (un code alphanumérique est une mauvaise clé primaire !), il va donc être difficile de décider quel code conserver plutôt que tel autre !

Surtout que les autres informations d'un même produit avec des codes différents peuvent être potentiellement différentes ; lesquelles conserver ?

Bref, un bel exemple de ce qu'il ne faut pas faire en matière de BDD relationnelle !
Surtout qu'il y aurait d'autres critiques à faire sur cette table !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 11h47   #10
EPH69
Invité de passage
 
Homme
Conseil - Consultant en systèmes d'information
Inscription : décembre 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information

Informations forums :
Inscription : décembre 2012
Messages : 4
Points : 0
Points : 0
Par défaut Fusionner les valeurs d'une table

Cette table a été créée et livrée avec un logiciel commercial pour magasin de meuble. Les données ont été créées au travers de l'application.

En finalité, peut-on, même manuellement, au cas par cas, effectuer une fusion même si l'on doit perdre l'historique du modele que l'on ne conserve pas.
EPH69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 12h35   #11
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 666
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 666
Points : 25 514
Points : 25 514
Envoyer un message via MSN à CinePhil
Comme le code est la clé primaire de la table, il est probable que ce code soit aussi référencé dans d'autres tables.

1ère étape : trouver tous les doublons.
Il faut pour cela définir quelles colonnes de la table vont déterminer les doublons. Est-ce seulement le nom du produit ? Ou au contraire peut-il y avoir plusieurs produits physiques avec un libellé identique mais différents par d'autres colonnes de la table ?

2ème étape : trouver toutes les tables qui référencent le code du produit.
Cela permettra de mettre à jour également les clés étrangères.

3ème étape : Se fixer une règle pour choisir le doublon à supprimer.
Soit le code le plus petit, soit le code le plus grand.
Attention, ceci peut avoir des conséquences sur les produits physiques ! S'il y a des produits physiques en magasin avec le code que vous allez supprimer, bonjour les dégâts ! Surtout s'il y a du code barre associé ; ça va être la panique à la caisse !

4ème étape : Fusionner les données des codes en doublon.
Il faut comparer les autres colonnes des doublons qui peuvent avoir des données différentes et choisir, au cas par cas ou selon une règle à établir, quelle information conserver. Si une colonne est vide pour un exemplaire du doublon et pleine pour l'autre, il est facile de copier la donnée existante. Mais si les deux exemplaires ont des valeurs différentes pour la même colonne, laquelle choisir ? Ce sera sûrement à décider au cas par cas. Le mieux est de sortir la liste des doublons avec les infos qui posent problème et de laisser le métier décider. Ils ont fait de la merde avec leur BDD, qu'ils assument un peu !

5ème étape : Supprimer les doublons devenus inutiles.
Il faut mettre à jour les clés étrangères avec le code conservé pour les lignes qui possèdent actuellement le code à supprimer.
Ensuite, on peut enfin supprimer les doublons devenus inutiles.

Se poser quand même la question sur les conséquences physiques d'une telle opération !
Si un client pose une réclamation sur un produit portant un code qui n'existe plus dans la BDD, que se passera t-il ?

Il faudrait, par précaution minimum, enregistrer la trace des correspondances entre anciens codes et nouveaux et bien briefer le personnel en charge de prendre en compte ce genre de problème.

Bon courage !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h33.


 
 
 
 
Partenaires

Hébergement Web