Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/11/2010, 11h23   #1
Membre habitué
 
Inscription : mars 2002
Messages : 560
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 560
Points : 107
Points : 107
Par défaut Requête - Problème de comptage

Bonjour,

J'ai la requête suivante sous Oracle que je voudrais simplifier :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
SELECT DISTINCT c.c_client AS "Code", c.l_client AS "Libellé", 
case f.indi_pur_adm
when 'P' then 'PUR'
when 'A' then 'ADMINISTRE'
end,
case
when f.indi_resident = 'R' then 'Résident'  
when f.indi_resident = 'N' then 'Non Résident' 
end,
count(f.acti_iden) AS Volume, 
'01/01/2009' AS "Date de début", 
'31/03/2009' AS "Date de fin"
FROM fac_reg_soldes f, client c
WHERE c.c_id_client = f.c_id_client
AND f.c_id_client = 861
AND (f.vale_natu = 'ACTION' OR f.vale_natu = 'BON' OR f.vale_natu = 'OBLIGATION')
AND f.soaa_date BETWEEN to_date('01/01/2009', 'dd/mm/yyyy') AND to_date('31/03/2009', 'dd/mm/yyyy')
AND f.indi_pur_adm = 'P'
AND indi_issu_paga = 'N'
AND indi_issu_so = 'N'
AND f.soaa_quan <> 0 
GROUP BY c.c_client, c.l_client, f.INDI_PUR_ADM, f.soaa_date, f.indi_resident
Cette requête me ramanène le résultat suivant :

Code Libellé Détention Résident Volume Date de début Date de fin
12 Société PUR Résident 2 01/01/2009 31/03/2009
12 Société PUR Résident 1 01/01/2009 31/03/2009

Voilà en fait je voudrais faire en plus une somme de la colonne Volume donc n'avoir qu'une ligne :
12 Société PUR Résident 3 01/01/2009 31/03/2009

Merci par avance pour votre retour.
david71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 11h48   #2
Membre habitué
 
Inscription : mars 2002
Messages : 560
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 560
Points : 107
Points : 107
Que pensez-vous de la requête suivante, en changeant l'emplacement du DISTINCT ?

Code :
1
2
3
4
5
6
7
8
9
10
11
 
SELECT c.c_client , c.l_client, count(DISTINCT f.acti_iden) AS Volume, f.indi_pur_adm, f.indi_resident,
'01/01/2009' AS "Date de début", 
'31/03/2009' AS "Date de fin"
FROM fac_reg_soldes f, client c
WHERE c.c_id_client = 861
AND f.c_id_client = c.c_id_client
AND f.soaa_quan <> 0 AND (f.vale_natu = 'ACTION' OR f.vale_natu = 'BON' OR f.vale_natu = 'OBLIGATION')
AND f.soaa_date BETWEEN to_date('01/01/2009', 'dd/mm/yyyy') AND to_date('31/03/2009', 'dd/mm/yyyy')
AND f.indi_pur_adm = 'P' AND indi_issu_paga = 'N' AND indi_issu_so = 'N'
GROUP BY c.c_client, c.l_client, f.indi_pur_adm, f.indi_resident
Merci d'avance pour votre retour.
david71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 11h59   #3
Membre régulier
 
Inscription : septembre 2008
Messages : 84
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 84
Points : 88
Points : 88
Bonjour,

Merci de fournir un jeu de données.

Sinon, la modification sur le distinct a sûrement moins d'importance que la suppression du "f.soaa_date" dans le Group By
spdev666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 14h12   #4
Membre habitué
 
Inscription : mars 2002
Messages : 560
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 560
Points : 107
Points : 107
Oui en effet en rajoutant la date dans le select et le group by j'ai 4 lignes .
Mais je n'ai pas besoin de la date dans le select mais uniquement d'une période de recherche dans la clause WHERE.

Voilà si vous croyez que cela n'est pas cohérent merci de me le dire.
david71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 14h30   #5
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Garde la même requête et pour le group by mets
Code :
GROUP BY c.c_client, c.l_client, f.INDI_PUR_ADM, f.indi_resident
comme proposé par spdev666
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 17h16   #6
Membre habitué
 
Inscription : mars 2002
Messages : 560
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 560
Points : 107
Points : 107
OK donc la requête du message #2 est correcte....
david71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 10h22   #7
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Oui vous aviez bien trouvé. Merci de marquer la discussion en résolu.
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h38.


 
 
 
 
Partenaires

Hébergement Web