Sommes "sélectives" ?

Sommes "sélectives" ? - SQL/NoSQL - Programmation

Marsh Posté le 03-06-2004 à 11:24:52    

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
Reply

Marsh Posté le 03-06-2004 à 11:24:52   

Reply

Marsh Posté le 03-06-2004 à 11:27:22    

avec group by


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 03-06-2004 à 11:33:57    

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


Reply

Marsh Posté le 03-06-2004 à 11:39:59    

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
Reply

Marsh Posté le 03-06-2004 à 11:49:16    

[ 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
Reply

Marsh Posté le 03-06-2004 à 11:57:50    

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  ;)

Reply

Marsh Posté le 03-06-2004 à 12:02:24    

[ 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
Reply

Marsh Posté le 03-06-2004 à 12:02:40    

bon, ça existe pas  :-\

Reply

Marsh Posté le 03-06-2004 à 12:03:55    

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  :)

Reply

Marsh Posté le 03-06-2004 à 15:13:48    

eup!  :bounce:

Reply

Marsh Posté le 03-06-2004 à 15:13:48   

Reply

Marsh Posté le 03-06-2004 à 15:25:00    

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

Reply

Marsh Posté le 03-06-2004 à 15:27:01    

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:

Reply

Marsh Posté le 03-06-2004 à 15:31:27    

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

Reply

Marsh Posté le 03-06-2004 à 15:36:23    

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
Reply

Marsh Posté le 03-06-2004 à 15:42:02    

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

Reply

Marsh Posté le 03-06-2004 à 15:47:16    

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

Reply

Marsh Posté le 03-06-2004 à 15:54:41    

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...

Reply

Marsh Posté le 03-06-2004 à 15:55:34    

[ 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!!!

Reply

Marsh Posté le 04-06-2004 à 09:53:51    

un dernier up au cas où  :bounce:

Reply

Marsh Posté le 04-06-2004 à 11:29:52    

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.

Reply

Marsh Posté le 04-06-2004 à 15:51:50    

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  :/

Reply

Marsh Posté le 04-06-2004 à 16:20:05    

[ 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
Reply

Marsh Posté le 04-06-2004 à 16:34:53    

ç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
Reply

Marsh Posté le 07-06-2004 à 14:55:35    

un dernier up pour la forme  :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed