Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1324 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] "outer join" et "sum", "min": requête problematique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] "outer join" et "sum", "min": requête problematique

n°619087
goueg
De passage
Posté le 22-01-2004 à 16:03:46  profilanswer
 

Salut,
 
Soit la base de données
CLIENT > num_cli
ACHAT > num_cli (etrangere), date_expiration, int_reste
 
Je voudrais afficher pour chaque client son solde d'unités restantes encore valides.
J'ai fait ca:
 

SELECT     client.num_cli, MIN(achat.date_expiration) AS date_min, SUM(achat.int_reste) AS reste_tot
FROM         achat RIGHT OUTER JOIN
                      client ON achat.num_cli = client.num_cli
WHERE     (achat.date_expiration > { fn NOW() }) AND (achat.int_reste > 0)
GROUP BY client.num_cli


 
et j'obtiens...
 

num_cli date_min reste_tot
4 20/02/2004 11:43:00 150


 
Bon les données sont correctes mais si j'ai fait un OUTER JOIN c'était pour avoir une logne de résultat pour chaque client, de ce type:
 

num_cli date_min reste_tot
1 <null> 0
2 <null> 0
3 <null> 0
4 20/02/2004 11:43:00 150


 
Et du coup, je vois pas comment faire, vu que les fonctions min() et sum() éliminent les lignes correspondant à un client n'ayant fait aucun achat...
 
Vous auriez une idée? :)


Message édité par goueg le 22-01-2004 à 16:07:06
mood
Publicité
Posté le 22-01-2004 à 16:03:46  profilanswer
 

n°619139
bill.fr
Posté le 22-01-2004 à 16:23:39  profilanswer
 

left outer join au lieu de right outer join ?


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
n°619147
Agagax
Posté le 22-01-2004 à 16:26:52  profilanswer
 

Enleve ton where (achat.int_reste > 0) et tes clients dont la somme des int_reste = 0 apparaitra !

n°619162
Profil sup​primé
Posté le 22-01-2004 à 16:36:06  answer
 

allé c pas grave pense a ce soir  [:______ from ppc]

n°619176
tomlameche
Et pourquoi pas ?
Posté le 22-01-2004 à 16:44:02  profilanswer
 

Goueg a écrit :

Salut,
 
Soit la base de données
CLIENT > num_cli
ACHAT > num_cli (etrangere), date_expiration, int_reste
 
Je voudrais afficher pour chaque client son solde d'unités restantes encore valides.
J'ai fait ca:
 

SELECT     client.num_cli, MIN(achat.date_expiration) AS date_min, SUM(achat.int_reste) AS reste_tot
FROM         achat RIGHT OUTER JOIN
                      client ON achat.num_cli = client.num_cli
WHERE     (achat.date_expiration > { fn NOW() }) AND (achat.int_reste > 0)
GROUP BY client.num_cli


 
et j'obtiens...
 

num_cli date_min reste_tot
4 20/02/2004 11:43:00 150


 
Bon les données sont correctes mais si j'ai fait un OUTER JOIN c'était pour avoir une logne de résultat pour chaque client, de ce type:
 

num_cli date_min reste_tot
1 <null> 0
2 <null> 0
3 <null> 0
4 20/02/2004 11:43:00 150


 
Et du coup, je vois pas comment faire, vu que les fonctions min() et sum() éliminent les lignes correspondant à un client n'ayant fait aucun achat...
 
Vous auriez une idée? :)


Essaie ça :

Citation :

SELECT     client.num_cli, MIN(achat.date_expiration) AS date_min, SUM(achat.int_reste) AS reste_tot  
FROM         achat RIGHT OUTER JOIN  
                      client ON achat.num_cli = client.num_cli  
WHERE     (achat.date_expiration > { fn NOW() } AND achat.int_reste > 0) or achat.num_cli is null
GROUP BY client.num_cli


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
n°619214
goueg
De passage
Posté le 22-01-2004 à 17:04:10  profilanswer
 

merci pour vos réponses,  
 
bill > non, c bien un right dans mon cas ;)
 
agagax > certes mais les clients dont la somme n'existe pas n'apparaissent toujours pas (clients n'ayant pas passé d'achat)
 
mrmat > [:yaisse]
 
tomlameche > c presque bon :jap:
Il reste un cas qui pose problème, c'est quand un client est bien présent dans la table achat, mais que la date d'expiration a été atteinte ou que int_reste vaut 0 >> il n'apparait pas dans le résultat de la requête.
En clair si (achat.date_expiration > { fn NOW() } AND achat.int_reste > 0) échoue mais que le client est bien présent dans la table achat, c pas bon...  
Mais bon on s'approche là :)


Message édité par goueg le 22-01-2004 à 17:14:44
n°619284
Agagax
Posté le 22-01-2004 à 18:35:30  profilanswer
 

Et avec ça en clause where  ? :
 
WHERE (achat.date_expiration > { fn NOW() } OR achat.date_expiration is null)

n°619773
goueg
De passage
Posté le 23-01-2004 à 10:18:41  profilanswer
 

bon là en fait ca fait plus ce qu'il faut: date_expiration, c'est la prochaine date d'expiration qui va faire expirer des unités (int_reste).
donc en faisant comme ca date_expiration indiquerait la prochaine date d'expiration sans tenir compte du fait que ce soit la date a laquelle 0 unités expirent.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] "outer join" et "sum", "min": requête problematique

 

Sujets relatifs
bug de ASP - SQL serveur ?? tabulations et espaces aléatoires...[postgreSQL][unix] scripts SQL et PL/SQL
[SQL-CRYSTAL REPORT][DELPHI] Requete SQL ? [RESOLU]
[SQL Server] Minusrequête SQL qui ne passe pas sous Acces mais sous Oracle et MSSQL
Comment passer un ' ds une variable lors d'une requete sql[MySQL] Aide sur une requète
Plus de sujets relatifs à : [SQL] "outer join" et "sum", "min": requête problematique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR