OVH Cloud OVH Cloud

Conception requete SQL

7 réponses
Avatar
SuperGolgoth
Bonjour à tous,
ma question du jour est la suivante :
Soit une table (tab1) contenant :
- Magasin (mag)
- code produit (codpro)
- Description (descript)
soit une autre table (tab2) contenant :
- Magasin (mag)
- Code produit (codpro)
- Analyse A (analisA)
- Analyse B (analisB)
et une 3eme table (tab3) contenant :
- Magasin (mag)
- Code produit (codpro)
- Analyse A (analisA)
- Analyse B (analisB)

Mon robleme est le suivant
Pour tous les produit commencant par 'A', je veux recuperer les 2 codes
analyse de la table 2, et si ces codes sont vide, dans ce cas ce sont
les codes analyse de la table 3 que je dois recuperer ...
Je n'arrive pas a le coder en une requete ...

Merci de votre aide

7 réponses

Avatar
GLB
Bonjour et meilleurs voeux,


Cette requette devrait faire l'affaire

select t1.mag, t1.codpro, t1.description
, CASE WHEN isnull(t2.AnalisA,0) = 0 THEN t3.AnalisA ELSE t2.AnalisA END
, CASE WHEN isnull(t2.AnalisB,0) = 0 THEN t3.AnalisB ELSE t2.AnalisB END
from tab1
left outer join tab2 t2 on t2.codepro = t1.codepro AND t2.mag = t1.mag
left outer join tab3 t3 on t3.codepro = t1.codepro AND t3.mag = t1.mag
Where t1.description like 'A%'

Non testé

A+ Gilles
Avatar
jeje
"GLB" a écrit dans le message de
news:
Bonjour et meilleurs voeux,


Cette requette devrait faire l'affaire

select t1.mag, t1.codpro, t1.description
, CASE WHEN isnull(t2.AnalisA,0) = 0 THEN t3.AnalisA ELSE t2.AnalisA
END
, CASE WHEN isnull(t2.AnalisB,0) = 0 THEN t3.AnalisB ELSE t2.AnalisB
END
from tab1
left outer join tab2 t2 on t2.codepro = t1.codepro AND t2.mag = t1.mag
left outer join tab3 t3 on t3.codepro = t1.codepro AND t3.mag = t1.mag
Where t1.description like 'A%'



Plus simple à écrire et qui devrait fonctionner également :

select t1.mag, t1.codpro, t1.description, coalesce(t2.AnalisA,
t3.AnalisA), coalesce(t2.AnalisB, t3.AnalisB)
from tab1
left outer join tab2 t2 on t2.codepro = t1.codepro AND t2.mag = t1.mag
left outer join tab3 t3 on t3.codepro = t1.codepro AND t3.mag = t1.mag
Where t1.description like 'A%'

Non testé



Non plus ;-)
--
Jérôme
Avatar
SuperGolgoth
Excellent, mais ...
les zones 'vide' ne sont pas null ... elles sont vide ( = '' )
Merci quand meme, je ne connaissais pas cette fonction. ca va me
reservir

jeje avait prétendu :
"GLB" a écrit dans le message de
news:
Bonjour et meilleurs voeux,


Cette requette devrait faire l'affaire

select t1.mag, t1.codpro, t1.description
, CASE WHEN isnull(t2.AnalisA,0) = 0 THEN t3.AnalisA ELSE t2.AnalisA END
, CASE WHEN isnull(t2.AnalisB,0) = 0 THEN t3.AnalisB ELSE t2.AnalisB END
from tab1
left outer join tab2 t2 on t2.codepro = t1.codepro AND t2.mag = t1.mag
left outer join tab3 t3 on t3.codepro = t1.codepro AND t3.mag = t1.mag
Where t1.description like 'A%'



Plus simple à écrire et qui devrait fonctionner également :

select t1.mag, t1.codpro, t1.description, coalesce(t2.AnalisA, t3.AnalisA),
coalesce(t2.AnalisB, t3.AnalisB)
from tab1
left outer join tab2 t2 on t2.codepro = t1.codepro AND t2.mag = t1.mag
left outer join tab3 t3 on t3.codepro = t1.codepro AND t3.mag = t1.mag
Where t1.description like 'A%'

Non testé



Non plus ;-)


Avatar
GLB
Bonjour
et merci jeje,

je ne voyais pas l'utilisation de cette fonction et en fin de compte
j'utilisais toujour les case pour arriver a mes fins :-)

ortographe non testé :-)

A+

Gilles

PS donc ma première requete fontionne
en remplaçant les " isnull(...)" par des "t2.AnalisA = ""
Avatar
jeje
"SuperGolgoth" a écrit dans le message de news:

Excellent, mais ...
les zones 'vide' ne sont pas null ... elles sont vide ( = '' )



Dans ce cas, la soluce de GLB est à retenir alors.

Merci quand meme, je ne connaissais pas cette fonction. ca va me
reservir



Je m'en sers très régulièrement. En contre partie, je veille toujours à
ce que les champs sans valeur soient bien "Null" et non "vide". :-)
--
Jérôme
Avatar
SuperGolgoth
Je suis d'accord avec toi, mais c'est la base d'un ERP, et je me refuse
a modifier la strucure de la base pour faire en sorte que les zones
accepte les null ...

Error: Impossible d'insérer la valeur NULL dans la colonne
'analysis_b', table 'BASE.dbo.table2'. Cette colonne n'accepte pas les
valeurs NULL.


Dans son message précédent, jeje a écrit :
"SuperGolgoth" a écrit dans le message de news:

Excellent, mais ...
les zones 'vide' ne sont pas null ... elles sont vide ( = '' )



Dans ce cas, la soluce de GLB est à retenir alors.

Merci quand meme, je ne connaissais pas cette fonction. ca va me reservir



Je m'en sers très régulièrement. En contre partie, je veille toujours à ce
que les champs sans valeur soient bien "Null" et non "vide". :-)


Avatar
SuperGolgoth
Merci beaucoup
avec quelques adaptations (ce qui est normal of course)
ca fonctionne a merveille
Encore bravo

GLB a utilisé son clavier pour écrire :
Bonjour et meilleurs voeux,


Cette requette devrait faire l'affaire

select t1.mag, t1.codpro, t1.description
, CASE WHEN isnull(t2.AnalisA,0) = 0 THEN t3.AnalisA ELSE t2.AnalisA END
, CASE WHEN isnull(t2.AnalisB,0) = 0 THEN t3.AnalisB ELSE t2.AnalisB END
from tab1
left outer join tab2 t2 on t2.codepro = t1.codepro AND t2.mag = t1.mag
left outer join tab3 t3 on t3.codepro = t1.codepro AND t3.mag = t1.mag
Where t1.description like 'A%'

Non testé

A+ Gilles