Regrouper des lignes en une seule [Résolu]

Signaler
Messages postés
27
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
11 février 2021
-
Messages postés
27
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
11 février 2021
-
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

Messages postés
31489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 février 2021
3 281
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

Messages postés
27
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
11 février 2021

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 ?
Messages postés
27
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
11 février 2021

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
Messages postés
27
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
11 février 2021

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 ?
Messages postés
27
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
11 février 2021

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