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

MS SQL Server Discussion :

Remplacer du vba par une jolie commande SQL


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Remplacer du vba par une jolie commande SQL
    Ne connaissant pas SQLServer j'ai quand même transferé mon appli Access
    Du coup je reprends mes bricolages pour essayer de faire plus propre et performant

    A force de recherches je trouve mon bonheur mais sur ce coup bof
    J'aimerais remplacer du code vb par une instruction SQL

    Je récupère ces 2 tables depuis une autre base d'un autre logiciel donc figées

    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
    TABLE1
    CODE  DESIGNATION
    ----------------------
    Aff1  Affaire Dupont
    Aff2  Affaire Marcel
    ...
    Affx  Affaire xxx
     
     
    TABLE2
    CODE  CHAMP  VALEUR
    -----------------------
    Aff1  Resp   Francis
    Aff1  Tel    0102030405
    Aff1  Mail   <a href="mailto:dupont@com.com">dupont@com.com</a>
    Aff2  Resp   Albert
    Aff2  Mail   <a href="mailto:albert@com.fr">albert@com.fr</a>
    Mon souhait mettre à jour vers une table unique dans mon SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CODE  DESIGNATION     RESP     TEL         MAIL           
    ------------------------------------------------------------------
    Aff1  Affaire Dupont  Francis  0102030405  <a href="mailto:dupont@com.com">dupont@com.com</a>  
    Aff2  Affaire Marcel  Albert   NULL        <a href="mailto:albert@com.fr">albert@com.fr</a>
    ...
    les valeurs de CHAMP ne changent pas mais il y en a pas mal
    Si quelqu'un avait la syntaxe : Merci d'avance

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    C'est assez basique :

    Un select sur TABLE1
    et 3 INNER JOIN (ou LEFT OUTER JOIN si certaines propriétés peuvent être nulles) sur TABLE2, avec à chaque fois un filtre différent sur "champ".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select t1.code, t1.designation, t2r.valeur resp, t2t.valeur tel, t2m.valeur mail
    from table1 t1
    inner join table2 t2r on t2r.code = t1.code and t2r.champ = 'RESP'
    inner join table2 t2t on t2t.code = t1.code and t2t.champ = 'TEL'
    inner join table2 t2m on t2m.code = t1.code and t2m.champ = 'MAIL'

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour la réponse rapide
    Mais ta syntaxe me retourne 3 fois la même valeur

    J'avais ça qui fonctionnait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT table1.code, table1.designation, t2r.valeur AS resp, t2t.valeur AS tel, t2m.valeur AS mail
    FROM table1 
    LEFT OUTER JOIN table2 t2r ON t2r.code = table1.code 
    LEFT OUTER JOIN table2 t2t ON t2t.code = table1.code 
    LEFT OUTER JOIN table2 t2m ON t2m.code = table1.code 
    WHERE
    t2r.champ = 'RESP' AND t2t.champ = 'TEL' AND t2m.champ = 'MAIL'
    Mais le truc qui me titillait c'est que je me retrouve avec 40 lignes de LEFT OUTER JOIN.
    Peut être pas d'autres méthodes

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    En fait ma méthode ne fonctionne pas a cause des vides dans Table2
    Ca ne me retourne que les lignes ou tous les champs existent

    Et si je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (t2r.champ = 'RESP' OR t2r.champ IS NULL) AND (t2t.champ = 'TEL' OR t2t.champ IS NULL) AND (t2m.champ = 'MAIL' OR t2m.champ IS NULL)
    J'ai les lignes avec tous les champs remplis ou tous les champs vides

    Help please

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Mise à part faute de frappe que je ne vois pas, ta requête, telle qu'elle est écrite, est strictement équivalente à celle que je t'ai proposé.

    Si tu modifies ma requête pour remplacer les INNER JOIN par des LEFT OUTER JOIN, tu devrais avoir le résultat escompté.

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Un grand MeaCulpa
    Mauvais copier coller dans t2*.champ = pareil
    Et la miracle il tient compte des NULL
    Un grand Merci à toi StringBuilder

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LibreOffice][Texte] Remplacer l'apostrophe moche par une jolie
    Par Jipété dans le forum OpenOffice & LibreOffice
    Réponses: 3
    Dernier message: 09/07/2014, 16h16
  2. Remplacer un bouton submit (bbcode) par une jolie icone
    Par Bruno.C dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/01/2008, 13h24
  3. Remplacer un caractère par une image
    Par mr.t dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 27/10/2005, 09h18
  4. Réponses: 4
    Dernier message: 13/10/2005, 14h44
  5. Réponses: 2
    Dernier message: 26/07/2005, 21h44

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