Regrouper des lignes en une seule

Résolu
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. 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
    1. 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. 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
    2. 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
      1. Modérateur
        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