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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Regroupage tableau par mois et par année en SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Regroupage tableau par mois et par année en SQL

n°2223826
laurent571​1
Posté le 02-04-2014 à 12:54:51  profilanswer
 

Bonjour,
 
J'essaie desespérément établir un tableau regroupant les CA par mois et par année. Ma requette est la suivante:  
 
Select 'Janvier' as mois, CAST(Sum(TTC_Montant - TVA_Montant)  As Decimal(4,4)) AS CA2013, 0.0 AS CA2014  
From  
          Documents  
     Where
           FastFilter <> 0 And Removed <> 1 and  
           (2013) = EXTRACT(YEAR FROM IF(NoFact = '' THEN (IF(NoLivr = '' THEN DateCmde Else DateLivr)) ELSE DateFact)) and
           (01)=EXTRACT(Month FROM IF(NoFact = '' THEN (IF(NoLivr = '' THEN DateCmde Else DateLivr)) ELSE DateFact))
union
Select 'Janvier' as mois, 0.0 AS CA2013, CAST(Sum(TTC_Montant - TVA_Montant)  As Decimal(4,4)) AS CA2014  
From  
          Documents  
     Where
           FastFilter <> 0 And Removed <> 1 and  
           (2014) = EXTRACT(YEAR FROM IF(NoFact = '' THEN (IF(NoLivr = '' THEN DateCmde Else DateLivr)) ELSE DateFact)) and
           (01)=EXTRACT(Month FROM IF(NoFact = '' THEN (IF(NoLivr = '' THEN DateCmde Else DateLivr)) ELSE DateFact))
Group by mois
 
et j'obtiens:  
une ligne Janvier, mon CA de janvier 2013 puis 0
une seconde ligne Janvier, 0 puis mon CA janvier 2014
 
 
Comment puis-je faire en sorte d'obtenir une ligne contatena tjanvier mon CA janvier 2013 et mon CA janvier 2014
 
Je débute en SQL....
 
D'avance merci


Message édité par laurent5711 le 02-04-2014 à 15:08:54
mood
Publicité
Posté le 02-04-2014 à 12:54:51  profilanswer
 

n°2223841
xuan-khanh
...
Posté le 02-04-2014 à 14:14:50  profilanswer
 

Dommage la requête serait un minimum indenté, j'aurais pris la peine de regarder.

n°2223863
laurent571​1
Posté le 02-04-2014 à 15:09:21  profilanswer
 

Peut être que sous ce format ça va vous inciter à m'aider, comme je l'ai dit je débute!!!!
D'avance merci


Message édité par laurent5711 le 02-04-2014 à 16:09:32
n°2223900
lasnoufle
La seule et unique!
Posté le 02-04-2014 à 16:15:37  profilanswer
 

Quel SGBD?
 
A voir ton "group by mois" a la fin de ta requete, je pense que tu voulais plus faire quelque chose comme ca:

Select mois, MAX(CA2013), MAX(CA2014) From
(Select 'Janvier' as mois, CAST(Sum(TTC_Montant - TVA_Montant)  As Decimal(4,4)) AS CA2013, 0.0 AS CA2014  
From  
          Documents  
     Where  
           FastFilter <> 0 And Removed <> 1 and  
           (2013) = EXTRACT(YEAR FROM IF(NoFact = '' THEN (IF(NoLivr = '' THEN DateCmde Else DateLivr)) ELSE DateFact)) and  
           (01)=EXTRACT(Month FROM IF(NoFact = '' THEN (IF(NoLivr = '' THEN DateCmde Else DateLivr)) ELSE DateFact))  
union  
Select 'Janvier' as mois, 0.0 AS CA2013, CAST(Sum(TTC_Montant - TVA_Montant)  As Decimal(4,4)) AS CA2014  
From  
          Documents  
     Where  
           FastFilter <> 0 And Removed <> 1 and  
           (2014) = EXTRACT(YEAR FROM IF(NoFact = '' THEN (IF(NoLivr = '' THEN DateCmde Else DateLivr)) ELSE DateFact)) and  
           (01)=EXTRACT(Month FROM IF(NoFact = '' THEN (IF(NoLivr = '' THEN DateCmde Else DateLivr)) ELSE DateFact))
)
Group by mois

La facon dont ta requete initiale est ecrite fait que le "group by" s'applique seulement a la deuxieme requete de l'union plutot qu'a l'ensemble (enfin je pense) ce qui explique pourquoi tu obtiens toujours deux lignes pour Janvier.
 
Sinon autre option, passer les requetes en sous-requetes dans une clause SELECT (le "FROM dual" c'est du Oracle, a adapter si pas Oracle):

Select 'Janvier' as mois,
   (Select CAST(Sum(TTC_Montant - TVA_Montant)  As Decimal(4,4)) From  
          Documents  
     Where
           FastFilter <> 0 And Removed <> 1 and  
           (2013) = EXTRACT(YEAR FROM IF(NoFact = '' THEN (IF(NoLivr = '' THEN DateCmde Else DateLivr)) ELSE DateFact)) and
           (01)=EXTRACT(Month FROM IF(NoFact = '' THEN (IF(NoLivr = '' THEN DateCmde Else DateLivr)) ELSE DateFact))) AS CA2013,
   (Select CAST(Sum(TTC_Montant - TVA_Montant)  As Decimal(4,4)) From  
          Documents  
     Where
           FastFilter <> 0 And Removed <> 1 and  
           (2014) = EXTRACT(YEAR FROM IF(NoFact = '' THEN (IF(NoLivr = '' THEN DateCmde Else DateLivr)) ELSE DateFact)) and
           (01)=EXTRACT(Month FROM IF(NoFact = '' THEN (IF(NoLivr = '' THEN DateCmde Else DateLivr)) ELSE DateFact))) AS CA2014
FROM dual


---------------
C'était vraiment très intéressant.
n°2223907
xuan-khanh
...
Posté le 02-04-2014 à 16:37:42  profilanswer
 

:jap:  :jap:  :jap:  
 
Not bad, je ne connaissais pas la technique du dual  [:roxelay]  
 
 
Sinon il y a les fonctions analytiques, un bon p'tit rollup.
Par contre pas assez pratiqué, donc je ne m'y risquerais pas à faire une démo ^^ (c'est surtout qu'il est presque 17h :p)


Message édité par xuan-khanh le 02-04-2014 à 16:38:34
n°2223974
laurent571​1
Posté le 03-04-2014 à 07:51:27  profilanswer
 

Bonjour,
 
Malheureusement mon logiciel me dit que la requête sql n'est pas correcte :(

n°2223996
xuan-khanh
...
Posté le 03-04-2014 à 10:23:15  profilanswer
 

laurent5711 a écrit :

Bonjour,
 
Malheureusement mon logiciel me dit que la requête sql n'est pas correcte :(


 
.....  [:tibo2002]  
On est plus dans une contrainte SQL là mais logiciel.
 
 
Et quel logiciel utilises-tu ?


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

  Regroupage tableau par mois et par année en SQL

 

Sujets relatifs
Récupérer variable colonne tableau BatchRequête SQL basée sur paramètre et table un peu étrange
Tableau Statique en C++Pervasive SQL Mettre a jour une Table
affichage du texte dans un tableau latexLire données pas à pas dans un fichier et stocker dans variables
Incompatibilité de type tableauRéponse SQL variable
Délai dépassé sur Requète SQL[SQL] Quand une des condition est dans le résultat
Plus de sujets relatifs à : Regroupage tableau par mois et par année en SQL


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