Regrouper des lignes en une seule

Résolu
drenfa Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -  
drenfa Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, j'ai un problème avec une requête SQL, je souhaite regrouper plusieurs lignes en 1 seules avec un SUM.
Voici la requête SQL je vous passe le
FROM
et le
Where
:
SELECT comptet.CT_Classement AS CLIENT
 ,docligne.ar_ref as REFERENCE_ARTICLE
 ,DL_Design as DESIGNATION_ARTICLE
 ,(CASE WHEN convert(date,convert(varchar(10),DO_DateLivr,103)) < convert(date,convert(varchar(10),CURRENT_TIMESTAMP,103)) then (
  --datepart(week, DO_DateLivr) < datepart(week, CURRENT_TIMESTAMP) and year(DO_DateLivr) <= year(CURRENT_TIMESTAMP)
   case when year(DO_DateLivr) < year(CURRENT_TIMESTAMP) then SUM(convert(int,docligne.DL_QteBC))  else (
    case when DATEPART(week, DO_DateLivr) < datepart(week, CURRENT_TIMESTAMP) then SUM(convert(int,docligne.DL_QteBC)) else 0 end
   ) end
  ) else 0 end) as QUANTITE

 ,(CASE WHEN convert(date,convert(varchar(10),DO_DateLivr,103)) < convert(date,convert(varchar(10),CURRENT_TIMESTAMP,103)) then (
  --datepart(week, DO_DateLivr) < datepart(week, CURRENT_TIMESTAMP) and year(DO_DateLivr) <= year(CURRENT_TIMESTAMP)
   case when year(DO_DateLivr) < year(CURRENT_TIMESTAMP) then SUM(docligne.DL_MontantHT)  else (
    case when DATEPART(week, DO_DateLivr) < datepart(week, CURRENT_TIMESTAMP) then SUM(docligne.DL_MontantHT) else 0 end
   ) end
  ) else 0 end) as prix

 ,CONVERT(date,convert(varchar(10),date_livraison.min_date,103)) as DATE
from ...
where ...

group by 
comptet.CT_Classement
,docligne.AR_Ref
,min_date
,DL_Design
,DO_DateLivr


Pour l'instant j'ai:
client article quantité prix date
client1 a1 2 50 2021/02/01
client1 a1 4 100 2021/02/01

Je souhaite
client article quantité prix date
client1 a1 6 150 2021/02/01.

Merci de votre aide.

PS: je suis sur SQL SERVER 2019

4 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    J'ai déplacé ta question dans le bon forum.

    Et en ce qui concerne ta question, pourquoi ne ferais tu pas un sous select ?
    En gros
    SELECT  CLIENT, REFERENCE_ARTICLE,DESIGNATION_ARTICLE, SUM(QUANTITE) as QTE, SUM(prix) as PRIX, DATE
    FROM (
      
      ta requête actuelle
    
    ) T
    GROUP BY  CLIENT
    

    0
  2. drenfa Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour Jordan, je te remercie de ta réponse mais dans ma requête j'ai déjà une sous requête pour récupérer la date minimal d'un article, je ne sais pas si faire une sous-requête dans une sous-requête à un impact sur les performances du serveur. Est ce le cas ?
    0
  3. drenfa Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
     
    En tout cas faire une sous requête pour calculer les différents montant fonctionne. Je vais regarder si les résultats sont cohérent avec les résultats attendus
    0
    1. drenfa Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
       
      Du coup j'ai regardé, malgré la sous-requête, sa donne exactement le même résultat.
      J'ai trouvé mon erreur, sa vient du group by,
      group by ,DO_DateLivr
      hors je ne veux pas que sa effectue le group by sur cette date, car les dates de livraison
       DO_DateLivr 
      sont différentes

      D'autres solutions ?
      0
  4. drenfa Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
     
    J'ai résolu mon probléme j'ai oublié de faire la sum des quantité et des montant dans la sélection globale. Et sa donne les bon résultats. J'avais oublié de faire cette
    SUM 
    0