Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/11/2011, 17h41   #1
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 4
Points : 1
Points : 1
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 :
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 :
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
VAL30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 09h26   #2
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
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 :
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'
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 12h16   #3
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 4
Points : 1
Points : 1
Merci pour la réponse rapide
Mais ta syntaxe me retourne 3 fois la même valeur

J'avais ça qui fonctionnait
Code :
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
VAL30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 13h06   #4
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 4
Points : 1
Points : 1
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 :
(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
VAL30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 13h38   #5
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
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é.
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 13h51   #6
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 4
Points : 1
Points : 1
Un grand MeaCulpa
Mauvais copier coller dans t2*.champ = pareil
Et la miracle il tient compte des NULL
Un grand Merci à toi StringBuilder
VAL30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h09.


 
 
 
 
Partenaires

Hébergement Web