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 07/03/2011, 23h51   #1
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 96
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 96
Points : 13
Points : 13
Par défaut select avec calcul sur plusieurs colones ?

salut les amis,

voilà j'ai une table qui se presente comme suit:

date | activation| offre
01/03/2011 1 PP
01/03/2011 5 PS
01/03/2011 2 PS
02/03/2011 4 PP
02/03/2011 1 PP

je voudrai appliquer une requete sql qui me permetterai d'avoir un resultat chiffré (une somme sur la colone activation et count sur la colone offre) le tout par date comme suit:

date | activation| offre PP| offre PS
01/03/2011 8 1 2
02/03/2011 5 2 0

merci à vous
mohe27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 08h43   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS mni
 
SQL> 
SQL> WITH DATA AS (
  2  SELECT To_date('01/03/2011','DD/MM/YYYY') AS dat, 1 AS activation, 'PP' AS offre FROM dual union ALL
  3  SELECT To_date('01/03/2011','DD/MM/YYYY') AS dat, 5, 'PS' FROM dual union ALL
  4  SELECT To_date('01/03/2011','DD/MM/YYYY') AS dat, 2, 'PS' FROM dual union ALL
  5  SELECT To_date('02/03/2011','DD/MM/YYYY') AS dat, 4, 'PP' FROM dual union ALL
  6  SELECT To_date('02/03/2011','DD/MM/YYYY') AS dat, 1, 'PP' FROM dual
  7  )
  8  SELECT dat, Sum(activation),
  9         Count(Case When Offre = 'PP' Then 1 End) AS PP,
 10         Count(Case When Offre = 'PS' Then 1 End) AS PS
 11    FROM DATA
 12   GROUP BY Dat
 13   ORDER BY Dat
 14  /
 
DAT         SUM(ACTIVATION)         PP         PS
----------- --------------- ---------- ----------
01/03/2011                8          1          2
02/03/2011                5          2          0
 
SQL>
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 09h45   #3
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 96
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 96
Points : 13
Points : 13
merci à toi mnitu,

c'est ok pour le resultat.
maintenant je vais changer un peu la done pour ce qui suit en gardant la même table:

date | activation| offre
01/03/2011 1 PP
01/03/2011 5 PS
01/03/2011 2 PS
02/03/2011 4 PP
02/03/2011 1 PP

seulement le resultat que je souhaiterai avoir c'est la somme des activation par offre et non pas le comptage de ces dernières:

date | activation| offre PP| offre PS
01/03/2011 8 1 7
02/03/2011 5 5 0

c'est à dire que la somme des PP + PS = Activation par date

comment puis-je remodeler la requete pour avoir ce resultat?

merci à toi
mohe27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 10h13   #4
Membre émérite
 
Avatar de Drizzt [Drone38]
 
Homme
Inscription : mai 2004
Messages : 739
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 739
Points : 979
Points : 979
Code :
1
2
3
4
5
6
7
8
 
WITH DATA AS (...)
SELECT dat, Sum(activation),
       nvl(sum(Case When Offre = 'PP' Then activation End),0) AS PP,
       nvl(sum(Case When Offre = 'PS' Then activation End),0) AS PS
  FROM DATA
GROUP BY Dat
ORDER BY Dat
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

(\ _ /)
(='.'=)
Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant
Drizzt [Drone38] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 10h35   #5
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 96
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 96
Points : 13
Points : 13
je te remercie Drizzt,

cette manip fonctionne bien sur Oracle, mais là je suis confronté à une situation 'Sql server' et les fonction telle que nvl n'y sont pas reconnue

je sais que ce n'est pas le lieu pour y débattre mais est-ce possible d'avoir une réponse avec paramétrage Sql Server au lieu d'Oracle

merci à toi
mohe27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 10h53   #6
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 96
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 96
Points : 13
Points : 13
c'est bon Drizzt,

j'ai trouvé l'équivalent Sqlserver, c'est la fonction isnull().

merci à toi mon ami

Salutations
mohe27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 10h53   #7
Membre émérite
 
Avatar de Drizzt [Drone38]
 
Homme
Inscription : mai 2004
Messages : 739
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 739
Points : 979
Points : 979
Tsss tu es bien dans le forum Oracle pourtant

D'après Google, tu peux remplacer NVL par ISNULL.
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

(\ _ /)
(='.'=)
Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant
Drizzt [Drone38] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 11h42   #8
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Laissez tomber nvl et isnull, et utilisez coalesce qui est la fonction normative pour ce genre de problème, et qui fonctionne sur presque tous les SGBD.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h14.


 
 
 
 
Partenaires

Hébergement Web