IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Update table temporaire


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 220
    Par défaut Update table temporaire
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    begin drop table #tableTemp end
    CREATE TABLE #tableTemp
    (
    	ID char NOT NULL PRIMARY KEY,
    	NOM VARCHAR NULL,
    	PRENOM VARCHAR NULL,
    	TEL_FIXE int NULL,
    	TEL_PORTABLE int NULL,
    	TEL_BUREAU int NULL,
    	MAIL VARCHAR NULL
    )
     
    UPDATE #tableTemp SET #tableTemp.ID = (select dbo.PERSONNE.ID from PERSONNE)
     
    Select *
    from #tableTemp

  2. #2
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Normal vous faites un UPDATE sur une table vide....
    Si vous voulez alimenter votre table temporaire passez par un INSERT...

    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.

    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?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 220
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TYPE       NUM               COMMENTAIRE       
    tel        04.....               bureau
    mail      ...@gmail.com  
    tel        06...
    tel        04...                 prive
    tel        04...
    pour vérifier le mail cela va car il faut juste vérifier si type='mail'.
    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.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Sur le principe, vous pouvez faire par exemple :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    SELECT 
        Nom, 
        Prenom, 
        Bur.Num AS TelBureau, 
        Priv.Num AS TelPrive, 
        Mail.Num AS Mail
    FROM Personne P
    LEFT OUTER JOIN INFOSUP_PERSONNE Bur
        ON P.ID = Bur.ID_PERSONNE
        AND Bur.TYPE = 'tel'
        AND Bur.Commentaire = 'bureau'
    LEFT OUTER JOIN NFOSUP_PERSONNE Priv
        ON P.ID = Bur.ID_PERSONNE
        AND Bur.TYPE = 'tel'
        AND Bur.Commentaire = 'prive'
    LEFT OUTER JOIN NFOSUP_PERSONNE Mail
        ON P.ID = Bur.ID_PERSONNE
        AND Bur.TYPE = 'mail'
    ORDER BY Nom, Prenom


    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 ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 220
    Par défaut
    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
    Je c'est mais pour trier je suis obliger de me basé sur quelque chose. Je ne vois pas vraiment comment je peut faire autrement.

    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 ?

    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.

    3/que faire quand il y a plusieurs mails pour une personne ?
    Je n'est pas vérifier ce cas la.

    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 ?
    C'est dans le cadre de la mise en place d'un CRM.

    J'ai commencer à faire un code. Mais j'ai un problème il rentre pas tous les nums il en saute.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    begin drop table #tableTemp end
    CREATE TABLE #tableTemp
    (
    	ID char(7) NOT NULL PRIMARY KEY,
    	NOM VARCHAR(100) NULL,
    	PRENOM VARCHAR(100) NULL,
    	TEL_FIXE VARCHAR(100) NULL,
    	TEL_PORTABLE VARCHAR(100) NULL,
    	TEL_BUREAU VARCHAR(100) NULL,
    	MAIL VARCHAR(100) NULL
    )
     
    INSERT INTO #tableTemp (#tableTemp.ID,#tableTemp.NOM,#tableTemp.PRENOM)
    SELECT dbo.PERSONNE.ID,dbo. PERSONNE.NOM,dbo. PERSONNE.PRENOM
    FROM PERSONNE
     
     
    UPDATE #tableTemp SET TEL_FIXE=
    	CASE 
             WHEN C.TYPE =  'TEL' THEN C.NUMERO 
        END
    FROM      #tableTemp S JOIN
              dbo. INFOSUP_PERSONNE C ON  S.ID = C.ID  Collate French_CI_AS
     
     
     
    Select *
    from #tableTemp
    order by ID

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    SELECT 
    	ID_PERSONNE, 
    	NUM, 
    	ROW_NUMBER() OVER (
    		PARTITION BY ID_PERSONNE 
    		ORDER BY 
    			CASE Commentaire 
    				WHEN 'prive' THEN 1 
    				WHEN 'bureau' THEN 2 
    				ELSE 3 
    			END
    		) AS RN
    FROM INFOSUP_PERSONNE 
    WHERE TYPE = 'tel'

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/07/2014, 11h46
  2. update sur plusieurs lignes avec table temporaire
    Par -=mateo=- dans le forum SQL
    Réponses: 3
    Dernier message: 23/12/2010, 14h40
  3. UPDATE et Table temporaire
    Par dany13 dans le forum Développement
    Réponses: 5
    Dernier message: 10/12/2009, 14h38
  4. Nettoyage de table temporaire
    Par Alain Dionne dans le forum Bases de données
    Réponses: 5
    Dernier message: 28/02/2004, 20h44
  5. UPDATE : table à partir d'une autre
    Par Laura dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/10/2003, 21h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo