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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Sommes "sélectives" ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Sommes "sélectives" ?

n°750355
[ ZeD ]
Désigné volontaire
Posté le 03-06-2004 à 11:24:52  profilanswer
 

hello,
 
voilà j'ai dans une table un champ "statut" qui peut prendre différentes valeurs (0, 1, 2, ...) et je voudrais obtenir sur la même ligne, le nombre de d'entrées dans la base qui ont le statut 0, le nb qui ont le statut 1, etc...
 
bref, pour l'instant j'obtiens ça :
 

Date Statut Count(*)
01/06/2004 0 15
01/06/2004 6 1
01/06/2004 7 1
02/06/2004 0 13
02/06/2004 6 4
02/06/2004 7 1
03/06/2004 0 11
03/06/2004 2 4
04/06/2004 0 18
05/06/2004 0 6
07/06/2004 0 15


mais il me faudrait une ligne par date... c'est possible dans un select ?


Message édité par [ ZeD ] le 03-06-2004 à 11:25:49
mood
Publicité
Posté le 03-06-2004 à 11:24:52  profilanswer
 

n°750359
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-06-2004 à 11:27:22  profilanswer
 

avec group by


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°750370
[ ZeD ]
Désigné volontaire
Posté le 03-06-2004 à 11:33:57  profilanswer
 

ben j'en fais déjà un, mais là j'ai les sommes des statuts sous forme verticale et je les voudrais horizontale... ?
 
c-a-d passer de ça :

01/06/2004  0  15  
01/06/2004  6  1  
01/06/2004  7  1  


 
à ça :

01/06/2004  15 0 0 0 0 0 1 1


n°750385
strawfield
Pourquoi k'ca marche pas???
Posté le 03-06-2004 à 11:39:59  profilanswer
 

Sous Access ca donnerait un truc comme ca:

Code :
  1. SELECT DISTINCT
  2. [Date], [Statut],DCount("[Statut]","[Nom table]",[Date] & "=[Date] AND" & [Statut] & "=[Statut]" )
  3. FROM [Nom table];


 
Ou dans la condition du DCOUNT, date et statut en dehors des "" représentent ceux de la ligne en cours et ceux entre "" représentent ceux a selectionner par le DCOUNT.
 
C pas très clair ce que je dis des fois...
 
Sinon, je sais pas si DCOUNT est dispo dans d'autres SGBD.


Message édité par strawfield le 03-06-2004 à 11:40:57
n°750403
strawfield
Pourquoi k'ca marche pas???
Posté le 03-06-2004 à 11:49:16  profilanswer
 

[ zed ] a écrit :

c-a-d passer de ça :

01/06/2004  0  15  
01/06/2004  6  1  
01/06/2004  7  1  




 
Heu....mon truc du dessus te refait ca....
 

[ zed ] a écrit :


à ça :

01/06/2004  15 0 0 0 0 0 1 1




 
Pour ca se cerait:

Code :
  1. SELECT DISTINCT
  2. [Date],
  3. DCount("[Statut]","[Nom table]",[Date] & "=[Date] AND [Statut]=0" ) ,
  4. DCount("[Statut]","[Nom table]",[Date] & "=[Date] AND [Statut]=1" ) ,
  5. ...
  6. FROM [Nom table];


 
Le problème c'est que ca marche plus si tu ne connais pas la valeur maxi se statut...
 
Edit: correction des "" dans le code


Message édité par strawfield le 03-06-2004 à 11:50:56
n°750424
[ ZeD ]
Désigné volontaire
Posté le 03-06-2004 à 11:57:50  profilanswer
 

si je connais la valeur max, mais je suis sous oracle et je suis pas sûr que DCount existe, m'enfin je vais chercher, merci  ;)

n°750439
strawfield
Pourquoi k'ca marche pas???
Posté le 03-06-2004 à 12:02:24  profilanswer
 

[ zed ] a écrit :

si je connais la valeur max, mais je suis sous oracle et je suis pas sûr que DCount existe, m'enfin je vais chercher, merci  ;)


J'utilise pas oracle mais il doit y avoir un équivalent...
 
Les fct d'agrégation D... permettent de rajouter des conditions supplémentaires et/ou différentes pour une colonne que celle du WHERE.
 
C'est bien pratique...
 
Edit: c'est pas le tout de connaitre la valeur max, faut-il encore que ce soit une valeur discrète.


Message édité par strawfield le 03-06-2004 à 12:05:25
n°750440
[ ZeD ]
Désigné volontaire
Posté le 03-06-2004 à 12:02:40  profilanswer
 

bon, ça existe pas  :-\

n°750443
[ ZeD ]
Désigné volontaire
Posté le 03-06-2004 à 12:03:55  profilanswer
 

strawfield a écrit :


Les fct d'agrégation D... permettent de rajouter des conditions supplémentaires et/ou différentes pour une colonne que celle du WHERE.


oui c'est exactement ce qu'il me faut en fait  :)

n°750875
[ ZeD ]
Désigné volontaire
Posté le 03-06-2004 à 15:13:48  profilanswer
 

eup!  :bounce:

mood
Publicité
Posté le 03-06-2004 à 15:13:48  profilanswer
 

n°750909
hop le fou
Tu m'en diras tant
Posté le 03-06-2004 à 15:25:00  profilanswer
 

Peut etre que en les récupérant un par un et en les traitant par la suite...
 
Drapo en tout cas...

n°750915
strawfield
Pourquoi k'ca marche pas???
Posté le 03-06-2004 à 15:27:01  profilanswer
 

Ben, il reste plus que les requêtes imbriquées...
 
J'ai déjà pratiqué ce sport là dans la WHERE mais jamais dans le SELECT mais ca doit le faire aussi. :whistle:

n°750936
hop le fou
Tu m'en diras tant
Posté le 03-06-2004 à 15:31:27  profilanswer
 

si ca existe je connais pas...
mais je pensais a un traitement derriere...
le résultat est affiché avec quoi? directement sur une console?

n°750952
strawfield
Pourquoi k'ca marche pas???
Posté le 03-06-2004 à 15:36:23  profilanswer
 

hop le fou a écrit :

si ca existe je connais pas...


 
Je viens de regarder vite fait dans mon bouquin de sql, ca a pas l'air d'exister... :(  
 
Sinon tu peut pas faire une requête union???
J'ai jamais utilisé ca mais ca doit être fait pour ces cas là...je me trompe??? :whistle:


Message édité par strawfield le 03-06-2004 à 15:36:47
n°750961
Beegee
Posté le 03-06-2004 à 15:42:02  profilanswer
 

les unions c'est pas pour ça, c'est pour regrouper dans les résultats des données provenant de plusieurs tables.

n°750970
[ ZeD ]
Désigné volontaire
Posté le 03-06-2004 à 15:47:16  profilanswer
 

bon ben je crois que c'est mort alors, tant pis  :-/

n°750995
strawfield
Pourquoi k'ca marche pas???
Posté le 03-06-2004 à 15:54:41  profilanswer
 

Beegee a écrit :

les unions c'est pas pour ça, c'est pour regrouper dans les résultats des données provenant de plusieurs tables.


 
C'est ce que je pensais, mais je ma suis mal exprimé:
 
Il faudrait faire une requête par valeur possible de 'statut' et tout regrouper avec une requête union...

n°750997
strawfield
Pourquoi k'ca marche pas???
Posté le 03-06-2004 à 15:55:34  profilanswer
 

[ zed ] a écrit :

bon ben je crois que c'est mort alors, tant pis  :-/


 
Ce serait quand même la fin du monde si je peut le faire en 2 temps 3 mouvements sous access et que tu puisses pas le faire sous oracle!!!

n°752034
[ ZeD ]
Désigné volontaire
Posté le 04-06-2004 à 09:53:51  profilanswer
 

un dernier up au cas où  :bounce:

n°752256
Beegee
Posté le 04-06-2004 à 11:29:52  profilanswer
 

je vois pas trop l'intérêt de se casser la tête à faire ça dans la requête ... c'est typiquement un problème de présentation de données, donc ça se fait plutôt dans le code qui récupère le résultat de la requête donnée dans le premier post.

n°752737
[ ZeD ]
Désigné volontaire
Posté le 04-06-2004 à 15:51:50  profilanswer
 

en fait j'ai besoin de faire une vue donc je suis obligé de tout faire avec un select...
 
sinon j'ai trouvé un début de solution, c'est super crade mais ça marche  :p
 

Code :
  1. select distinct
  2. (select Date from Table where Date='04/06/2004' group by Date) as Jour,
  3. (select count(*) from Table where Date='04/06/2004' and Statut=0) as Statut_0,
  4. (select count(*) from Table where Date='04/06/2004' and Statut=1) as Statut_1,
  5. ...
  6. (select count(*) from Table where Date='04/06/2004') as Total
  7. from Table;


Donc là j'obtiens bien ce que je veux mais forcément ça me sort qu'une ligne correspondant à la date spécifiée... et je vois trop comment faire pour afficher plusieurs journées  :/

n°752837
strawfield
Pourquoi k'ca marche pas???
Posté le 04-06-2004 à 16:20:05  profilanswer
 

[ zed ] a écrit :

en fait j'ai besoin de faire une vue donc je suis obligé de tout faire avec un select...
 
sinon j'ai trouvé un début de solution, c'est super crade mais ça marche  :p
 

Code :
  1. select distinct
  2. (select Date from Table where Date='04/06/2004' group by Date) as Jour,
  3. (select count(*) from Table where Date='04/06/2004' and Statut=0) as Statut_0,
  4. (select count(*) from Table where Date='04/06/2004' and Statut=1) as Statut_1,
  5. ...
  6. (select count(*) from Table where Date='04/06/2004') as Total
  7. from Table;


Donc là j'obtiens bien ce que je veux mais forcément ça me sort qu'une ligne correspondant à la date spécifiée... et je vois trop comment faire pour afficher plusieurs journées  :/


 
Donc le select dans le corps de requête marche!!! Je me coucherai moins bête ce soir!!!
 
 
Et un truc dans ce gout là, t'as essayé???

Code :
  1. select distinct
  2. date as dateligne,
  3. (select count(*) from Table where Date=dateligne and Statut=0) as Statut_0,
  4. ...
  5. (select count(*) from Table where Date=dateligne) as Total
  6. from Table;


Message édité par strawfield le 04-06-2004 à 16:20:50
n°752855
[ ZeD ]
Désigné volontaire
Posté le 04-06-2004 à 16:34:53  profilanswer
 

ça semblait une bonne idée mais ça marche pas  :/
 
--
(select count(*) from Table where Date=dateligne and Statut=0) as Statut_0,
--
 
il me dit "dateligne : nom de colonne non valide", groumf...


Message édité par [ ZeD ] le 04-06-2004 à 16:36:12
n°754891
[ ZeD ]
Désigné volontaire
Posté le 07-06-2004 à 14:55:35  profilanswer
 

un dernier up pour la forme  :)

mood
Publicité
Posté le   profilanswer
 


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

  Sommes "sélectives" ?

 

Sujets relatifs
Plus de sujets relatifs à : Sommes "sélectives" ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)