Regrouper des lignes en une seule

Résolu/Fermé
drenfa Messages postés 32 Date d'inscription samedi 21 avril 2018 Statut Membre Dernière intervention 14 juillet 2021 - Modifié le 10 févr. 2021 à 16:26
drenfa Messages postés 32 Date d'inscription samedi 21 avril 2018 Statut Membre Dernière intervention 14 juillet 2021 - 11 févr. 2021 à 10:09
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

jordane45 Messages postés 38267 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 novembre 2024 4 694
10 févr. 2021 à 16:31
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
drenfa Messages postés 32 Date d'inscription samedi 21 avril 2018 Statut Membre Dernière intervention 14 juillet 2021
11 févr. 2021 à 09:08
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
drenfa Messages postés 32 Date d'inscription samedi 21 avril 2018 Statut Membre Dernière intervention 14 juillet 2021
Modifié le 11 févr. 2021 à 09:29
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
drenfa Messages postés 32 Date d'inscription samedi 21 avril 2018 Statut Membre Dernière intervention 14 juillet 2021
Modifié le 11 févr. 2021 à 10:04
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
drenfa Messages postés 32 Date d'inscription samedi 21 avril 2018 Statut Membre Dernière intervention 14 juillet 2021
Modifié le 11 févr. 2021 à 10:11
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