Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème pour 1 requête SQL.

2 réponses
Avatar
Stéphane
Bonjour,

J'ai 1 soucis sur 1 requête SQL.

J'ai 3 tables :
T_A
T_B
T_C

Chacune de ces tables ont 1 champs, respectivement :
C_A
C_B
C_C

C_B et C_C sont numériques.

Pour 1 occurence de T_A il peut y avoir 0 ou plusieurs occurences de T_B.
Pour 1 occurence de T_B il ne peut y avoir qu'1 seule occurence de T_A.

Pour 1 occurence de T_B il peut y avoir 0 ou plusieurs occurences de T_C.
Pour 1 occurence de T_C il ne peut y avoir qu'1 seule occurence de T_B.

La clef primaire de T_A est Num_A.
La clef primaire de T_B est Num_B.
La clef primaire de T_C est Num_C.

La clef étrangère dans T_B correspondant à la clef primaire de T_A est
Num_A_B.
La clef étrangère dans T_C correspondant à la clef primaire de T_B est
Num_B_C.

La requête SQL que je cherche à faire est d'afficher toutes les valeurs de
C_A et de C_B où la valeur C_B est strictement supérieure à la somme des
valeurs de C_C, avec un regroupement par les tables T_A et T_B.

Le problème est sur les occurences de T_B qui ne correspondent à aucune
occurence dans T_C, ce qui fait qui fait que dans la valeur C_C est Null, et
donc, la somme de C_C est également Null.
Or, si l'on compare 1 occurence C_B à Null, cette même occurence ne
s'affiche pas dans la requête SQL.

Le problème persiste même en sélectionnant dans la requête Inclure tous les
enregistrements de T_B et seulement ceux de T_C pour lesquels les champs
joints sont égaux.

J'ai également essayé de faire 1 astuce pour contourner le problème de la
valeur Null, en crént 1 copie de C_C (C_C2) directement dans la requête en
faisant calculer = C_C + 0, mais hélàs, C_C2 reste toujours Null.

Pour vérifier si la requête est juste avec 1 valeur réelle dans T_C, j'ai
forcé 1 occurence de test en mettant 1 valeur dans C_C et la requête a
fonctionné normalement.

La requête est celle-ci :

SELECT T_A.C_A, T_B.C_B
FROM (T_A INNER JOIN T_B ON T_A.Num_A = T_B.Num_A_B) LEFT JOIN T_C ON
T_B.Num_B = T_C.Num_B_C
GROUP BY T_A.C_A, T_B.C_B
HAVING T_B.C_B>Sum(C_C);


Existe-t-il une solution pour gérer mon problème et donc afficher toutes les
occurences de T_B qui ne correspondent pas dans T_C sans avoir à passer par
du code VBA Access ?
Si oui, laquelle ?


Merci d'avance pour votre aide,

Cordialement,
Stéphane.

2 réponses

Avatar
Eric
Bonjour,

Lu rapidement.
Et si tu mets pour la clause Having:
HAVING T_B.C_B>Sum(nz(C_C,0)) ?

Bonjour,

J'ai 1 soucis sur 1 requête SQL.

J'ai 3 tables :
T_A
T_B
T_C

Chacune de ces tables ont 1 champs, respectivement :
C_A
C_B
C_C

C_B et C_C sont numériques.

Pour 1 occurence de T_A il peut y avoir 0 ou plusieurs occurences de T_B.
Pour 1 occurence de T_B il ne peut y avoir qu'1 seule occurence de T_A.

Pour 1 occurence de T_B il peut y avoir 0 ou plusieurs occurences de T_C.
Pour 1 occurence de T_C il ne peut y avoir qu'1 seule occurence de T_B.

La clef primaire de T_A est Num_A.
La clef primaire de T_B est Num_B.
La clef primaire de T_C est Num_C.

La clef étrangère dans T_B correspondant à la clef primaire de T_A est
Num_A_B.
La clef étrangère dans T_C correspondant à la clef primaire de T_B est
Num_B_C.

La requête SQL que je cherche à faire est d'afficher toutes les valeurs de
C_A et de C_B où la valeur C_B est strictement supérieure à la somme des
valeurs de C_C, avec un regroupement par les tables T_A et T_B.

Le problème est sur les occurences de T_B qui ne correspondent à aucune
occurence dans T_C, ce qui fait qui fait que dans la valeur C_C est Null, et
donc, la somme de C_C est également Null.
Or, si l'on compare 1 occurence C_B à Null, cette même occurence ne
s'affiche pas dans la requête SQL.

Le problème persiste même en sélectionnant dans la requête Inclure tous les
enregistrements de T_B et seulement ceux de T_C pour lesquels les champs
joints sont égaux.

J'ai également essayé de faire 1 astuce pour contourner le problème de la
valeur Null, en crént 1 copie de C_C (C_C2) directement dans la requête en
faisant calculer = C_C + 0, mais hélàs, C_C2 reste toujours Null.

Pour vérifier si la requête est juste avec 1 valeur réelle dans T_C, j'ai
forcé 1 occurence de test en mettant 1 valeur dans C_C et la requête a
fonctionné normalement.

La requête est celle-ci :

SELECT T_A.C_A, T_B.C_B
FROM (T_A INNER JOIN T_B ON T_A.Num_A = T_B.Num_A_B) LEFT JOIN T_C ON
T_B.Num_B = T_C.Num_B_C
GROUP BY T_A.C_A, T_B.C_B
HAVING T_B.C_B>Sum(C_C);


Existe-t-il une solution pour gérer mon problème et donc afficher toutes les
occurences de T_B qui ne correspondent pas dans T_C sans avoir à passer par
du code VBA Access ?
Si oui, laquelle ?


Merci d'avance pour votre aide,

Cordialement,
Stéphane.




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Stéphane
Un grand Merci, Eric !!! :)

Stéphane.


"Eric" a écrit dans le message de news:

Bonjour,

Lu rapidement.
Et si tu mets pour la clause Having:
HAVING T_B.C_B>Sum(nz(C_C,0)) ?

Bonjour,

J'ai 1 soucis sur 1 requête SQL.

J'ai 3 tables :
T_A
T_B
T_C

Chacune de ces tables ont 1 champs, respectivement :
C_A
C_B
C_C

C_B et C_C sont numériques.

Pour 1 occurence de T_A il peut y avoir 0 ou plusieurs occurences de T_B.
Pour 1 occurence de T_B il ne peut y avoir qu'1 seule occurence de T_A.

Pour 1 occurence de T_B il peut y avoir 0 ou plusieurs occurences de T_C.
Pour 1 occurence de T_C il ne peut y avoir qu'1 seule occurence de T_B.

La clef primaire de T_A est Num_A.
La clef primaire de T_B est Num_B.
La clef primaire de T_C est Num_C.

La clef étrangère dans T_B correspondant à la clef primaire de T_A est
Num_A_B.
La clef étrangère dans T_C correspondant à la clef primaire de T_B est
Num_B_C.

La requête SQL que je cherche à faire est d'afficher toutes les valeurs
de C_A et de C_B où la valeur C_B est strictement supérieure à la somme
des valeurs de C_C, avec un regroupement par les tables T_A et T_B.

Le problème est sur les occurences de T_B qui ne correspondent à aucune
occurence dans T_C, ce qui fait qui fait que dans la valeur C_C est Null,
et donc, la somme de C_C est également Null.
Or, si l'on compare 1 occurence C_B à Null, cette même occurence ne
s'affiche pas dans la requête SQL.

Le problème persiste même en sélectionnant dans la requête Inclure tous
les enregistrements de T_B et seulement ceux de T_C pour lesquels les
champs joints sont égaux.

J'ai également essayé de faire 1 astuce pour contourner le problème de la
valeur Null, en crént 1 copie de C_C (C_C2) directement dans la requête
en faisant calculer = C_C + 0, mais hélàs, C_C2 reste toujours Null.

Pour vérifier si la requête est juste avec 1 valeur réelle dans T_C, j'ai
forcé 1 occurence de test en mettant 1 valeur dans C_C et la requête a
fonctionné normalement.

La requête est celle-ci :

SELECT T_A.C_A, T_B.C_B
FROM (T_A INNER JOIN T_B ON T_A.Num_A = T_B.Num_A_B) LEFT JOIN T_C ON
T_B.Num_B = T_C.Num_B_C
GROUP BY T_A.C_A, T_B.C_B
HAVING T_B.C_B>Sum(C_C);


Existe-t-il une solution pour gérer mon problème et donc afficher toutes
les occurences de T_B qui ne correspondent pas dans T_C sans avoir à
passer par du code VBA Access ?
Si oui, laquelle ?


Merci d'avance pour votre aide,

Cordialement,
Stéphane.


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr