|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Bonjour
Je dois réussir à trier une table car tous les mails tels ect ... sont dans une colonne. J'ai décider pour cela d'utiliser une table temporaire car enfaite les données vienne de plusieurs tables. Dans un premier temps j'ai décidé de copier toute les colonnes ou il n'y a pas besoin de modification, je commence par l'ID. L'Update affiche aucune erreur seulement quand je fais le select il n'y a rien dans la table. merci d'avance Code :
|
||
|
|
00
|
|
|
#2 | |
|
Membre Expert
![]() |
Normal vous faites un UPDATE sur une table vide....
Si vous voulez alimenter votre table temporaire passez par un INSERT... Citation:
C'est une très mauvaise approche!!! Si vos données proviennent de plusieurs table inutile d'utiliser une table temporaire et de multiple insertions... une simple requête avec jointure suffira... Pouvez vous nous donner un exemple pour récupérer le mail de la personne?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#3 | ||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Merci ça marche mieux.
Donc enfaite il y a deux tables dans la table PERSONNE il y a ID,NOM,PRENOM,ect... et l'autre INFOSUP_PERSONNE il y a ID,ID_PERSONNE,TYPE,NUM,COMMENTAIRE présenter comme ça Code :
sinon pour les téléphones ses plus dur j'avais pensé regarder les commentaires qu'en il y en a. Donc c'est pour cela que j'avais penser à une table temporaire bien classer avec des case et insert. Le but étant de transférer dans la table d'une base qui est bien trier en mail, num_fixe,num portable... donc le problème et si la personne a deux numéro comme ci dessous. tel 04... tel 04... comment avec un select et une jointure je peut trier ceci? et lui dire tu place se numéro la et l'autre la. |
||
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
Sur le principe, vous pouvez faire par exemple : Code SQL :
Mais : 1/ se baser sur les commentaires ne sera pas forcément si simple, si ces commentaires proviennent de saisies manuel. Vous risquez de trouver 'prive', 'priv.', 'perso'... et il sera difficile de tout identifier automatiquement 2/ que faire quand vous n'avez pas de commentaire (dans la requete si dessus, il ne sont pas pris en compte, mais ça peut se régler simplement) par contre, si en plus il y a plusieurs telephones pour une personne, sans aucun commentaire, que faire ? 3/que faire quand il y a plusieurs mails pour une personne ? Il vous d'abord définir précisément ce que vous voulez, vérifier tous les cas possibles, ensuite la solution viendra bien plus facilement. Une question en plus. Pourquoi vouloir peupler une autre table à partir de celles-ci ? est-ce dans un contexte de migration ? comment allez vous exploiter ces données ensuite ? |
||
|
|
00
|
|
|
#5 | ||||||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Citation:
Citation:
Oui c'est justement le cas que j'ai citer plus haut. je pensais mettre le premier dans fixe si il n'y en a pas déjà un, et faire une colonne autre_num. Citation:
Citation:
J'ai commencer à faire un code. Mais j'ai un problème il rentre pas tous les nums il en saute. Code :
|
||||||
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
il "saute" des lignes car en fait, il va effectuer l'update avec la première ligne qu'il trouve répondant à la condition de jointure. Si la ligne en question ne répond pas au CASE, alors pas de mise à jour. Déplacez la du condition du case dans la jointure. il y a trop de cas par cas pour pouvoir vraiment vous aider sans les données, mais voici une requête qui va ordonner les numéros. prive -> 1 bureau ->2 cela fonctionne aussi pour les personne pour lesquels tous les commentaires sont a NULL ca ne fonctionnera pas par contre si des personnes on un commentaire pour bureau mais pas pour prive... ou pour celles ayant plusieurs commentaires pour prive... Mais ca peut vous donner quelques pistes pour avancer... Code SQL :
|
||
|
|
00
|
|
|
#7 | |||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Bonjour
Citation:
Je ne c'est pas si se que je veux faire est possible mais je voudrai faire quelque chose en TRANSACT SQL comme ceci : Code :
|
|||
|
|
00
|
|
|
#8 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Bonjour,
Citation:
Encore un exemple de requête spaghetti, alors qu'une conception propre aurait vu l'expression de la requête bien moins tordue : - une table des adresses e-mail, référençant la table client par exemple - une table des types d'adresse e-mail, référencée par la table des adresses e-mail - une table des numéros de téléphone, référençant la table client par exemple - une table des types de numéro de téléphone, référencée par la table des numéros de téléphone Dans les types d'adresse e-mail ou de numéro de téléphone, on peut tout à fait avoir la valeur du type mise à NULL. On ajoutera une contrainte d'unicité sur le nom du type. Il suffit ensuite d'écrire la vue qui convient en effectuant une jointure entre la table client et les autres tables, puis d'interroger la vue. Et donc bye bye la table temporaire. Le modèle est très flexible tout en garantissant l'intégrité : on peut ajouter des types d'adresse e-mail ou de numéro de téléphone autant qu'il peut en exister sans avoir quoi que ce soit à changer à la conception Quel est le tri que vous voulez effectuer ? @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
|
10
|
|
|
#9 | ||||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Citation:
Citation:
Citation:
Citation:
|
||||
|
|
00
|
|
|
#10 | |||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Citation:
Citation:
Cela dit rien ne nous empêche de suggérer à votre maître de stage le modèle que je vous ai proposé (je ne prends pas de droits d'auteur si vous le faites Code :
Je voudrais un tri qui me sépare tous les numéros de portable, bureaux, privées, et qui me le range dans des colonnes séparé. - le nombre maximal d'adresses e-mail - le nombre maximal de numéros de téléphone Si vous passez en colonne, alors vous perdez le type du numéro de téléphone, et de l'adresse e-mail ... Citation:
Quel numéro devez-vous choisir si la personne a plusieurs numéros ? @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|||
|
10
|
|
|
#11 | |||||||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Citation:
![]() Citation:
Citation:
Citation:
Citation:
J'ai essayais de le faire avec un curseur. Code :
Après c'est la première méthode que je trouve qui marche un peu prés mais si il y en a d'autre je l'ai veux bien. @++ |
|||||||
|
|
00
|
|
|
#12 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Je vous signale qu'il y a des portable en 07 en France et pour les étrangers (notamment zones frontalières) ceci ne veut rien dire !
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#13 | |||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Citation:
Citation:
![]() Citation:
Dans l'explorateur d'objets de SQL Server Management Studio (F8), faites un clic-droit sur la table puis : ![]() Et postez le script (si vous en avez le droit !). Citation:
Citation:
Je vous pardonne parce que vous êtes en stage, mais les curseurs, c'est vraiment de la grosse m... (je l'ai démontré ici). SQL est un langage ensembliste, donc il est conçu pour traiter les données dans leur ensemble, et non pas dans leur unité comme on le fait avec un curseur. Quand vous codez en SQL, oubliez tout ce que vous avez appris pour coder en fonctionnel (comme en C, C++, C#, Java, ...). @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|||||
|
10
|
|
|
#14 | |||||||||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Citation:
Citation:
Citation:
Code :
Citation:
Citation:
Citation:
Citation:
@++ |
|||||||||
|
|
00
|
|
|
#15 | |||||||||||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Citation:
Le script est un parfait exemple de ce qu'il ne faut pas faire, et c'est d'ailleurs presque exactement ce que montre SQLPro dans son étude d'indexation. Mais bon, visiblement vous n'avez pas le choix, alors on va faire avec Citation:
Pour en revenir à votre problème : dans votre table source, vous avez une liste de numéros et d'adresses e-mail pour lesquels vous n'avez pas forcément de type, et il est possible que vous ayez plusieurs numéros dans ce cas. Est-il également possible qu'une personne ait plusieurs numéros de même type ? Je vous conseillerai d'abord d'extraire les valeurs distinctes des types de numéros et e-mails que vous avez dans la table source. Code :
Par exemple vous pourriez à la suite de la requête précédente obtenir : Citation:
Code :
Code :
Code :
Ensuite vous mettez la colonne COMMENTAIRE de la table source à jour : Code :
Mais vous pouvez peut-être affecter des commentaires en amont, avant de les collecter et de les unifier à l'aide de l'exemple que je vous ai donné. Une fois cela fait, vous pouvez partir sur une requête comme celle que aieeeuuuuu vous a proposé, et balancer ça dans la table cible. Qu'en pensez-vous ? @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|||||||||||||
|
00
|
|
|
#16 | |||||||||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Bonjour
Désoler pour le retard. Citation:
J'ai remis un exemple en dessous, comme on peut voir la même personne peut posséder plusieurs numéro du même type. Mais aussi il peut y avoir TEL avec un commentaire bureau et le type TELB sans commentaire. et le mieux c'est quand la personne à plusieurs TEL sans commentaire, c'est l'anarchie total. Si j'ai forcément un type mais pas forcément de commentaire. Oui la personne peut avoir plusieurs numéro du même type. Ma table source : Code :
Citation:
portables, bureaux ... j'ai essayer ceci avec une vue et ça marcher vraiment bien. Citation:
Citation:
Je ne suis pas sur d'avoir bien compris ce que vous me proposez Désoler pour le dérangement Merci pour votre aide @++ |
|||||||||
|
|
00
|
|
|
#17 | ||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Bonjour
Voila ce que je voudrais réussir a faire. Je voudrai faire une requête qui me permet donc d’ordonnées toutes les données en fonction du type et du commentaire jusque la rien ne change. Mais je voudrai que si il y a plusieurs tel mail etc.. ceci se mette dans un champ text par exemple description ou je met tous les mails, les tel en trop de façon a ne perdre aucune données. Mais pour cela je dois vérifier si la case ne contient pas déjà quelque chose. Il y a t'il moyen avec une requête sql de vérifier si une case n'est pas déjà prise? Code :
il me faudrait rajouter si la case n'est pas déjà prise. merci d'avance |
||
|
|
00
|
|
|
#18 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Je n'ai pas vraiment compris, mais ce que vous voulez faire peut s'ecrire comme ca : Code SQL :
|
||
|
|
00
|
|
|
#19 |
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Oui mais avec ceci je ne peux pas lui dire que dans tout les autres cas je met dans description.
Je voudrais que si type='Mail' de la table INFOSUP_PERSONNE, il me fait un update sur la case mail de la table #tableTemp de la personne correspondante. si type='Tel' et commentaire='Prive' il me fait un update dans la table #tableTemp, de la case tel_prive pour la personne correspondante. ainsi de suite.... et si il rentre pas dans c cas il mette le numéro ou autre dans la case description de la personne. |
|
|
00
|
|
|
#20 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Je pense que votre problème n'est pas en SQL , mais plutot que vous ne savez pas vraiment quoi faire de toutes vos données
Vous ne pouvez pas modifier la base source ? ok, rien ne vous empeche d'en importer les données dans une table temporaire de la base cible pour travailler dessus. Personnellement, comme il s'agit plus d'un problème de migration que de traitement optimisé, je ferai quelque chose comme : 1/ importation des données de la source dans une table de travail de la BDD cible (en gros, le contenu de votre table INFOSUP_PERSONNE) ==> tmpSource(IDPersonne, Type, Num, Commentaire) 2/ creation d'une deuxième table temporaire, identique a la premiere, avec en plus une colonne indiquant le type selon vos critere ==>tmpCible(IDPersonne, Num, TypeOK) 3/ Ensuite, une série de suppression de la table tmpSource, pour les numéros "facile" à classer : par exemple : Code SQL :
idem pour les autre type de tel, puis pour les mails. La, il ne vous reste que des infos sans commentaires (ou avec des commentaires ne permettant pas d'identifier le contenu) Vous pouvez alors vous baser sur une requête (proche de celle que je vous ai déjà donnée) pour répartir les différents numéros restants selon vos critère (le premier en prive, le deuxième en pro,...). Une fois ceci fait, votre table tmpSource doit être vide, sinon vous avez oublié quelque chose Enfin, il reste a gérer le cas des personnes ayant plusieurs informations du même type (le je ne sais pas ce que vous voulez faire) pour terminer, mettre à jour votre table cible finale avec les informations de la table tmpCible, puis supprimer les deux tables temporaires... |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com