IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Somme Jour Mois Anne Total Sur différente reférence


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien en process industriel
    Inscrit en
    Février 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien en process industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Somme Jour Mois Anne Total Sur différente reférence
    Bonjour Tout le monde,


    Je souhaite concaténer le résultat de plusieurs requête dans un seul retour.

    J'ai une table de ce type .

    Id Date num nom PtCharg Melange Vortex Eau Debit AB3 AB2 TR1 TR2 TR3 TR4 TR5 Poids
    1 2023-06-30 14:38:01.973 1001 0/20 Lavé 1 0 0 2 600 50 30 10 8 0 0 0 50,6
    2 2023-06-30 14:38:47.647 1003 10/40 1 0 0 2 550 60 20 10 8 0 0 0 23,6
    2 2023-07-03 14:46:37.597 1003 10/40 1 0 0 2 550 60 20 10 8 0 0 0 23,6

    J'ai fait les requêtes suivante pour avoir différents résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Select [Num],
    		Sum( Poids) PoidsTotal
    		from [dbo].[Rapports] Group By [Num]
     
    Select [Num],
    		Sum( Poids) PoidsAnne
    		from [dbo].[Rapports] Where Year([Date]) = 2023  Group By [Num]
     
    Select [Num],
    		Sum( Poids) PoidsMois
    		from [dbo].[Rapports] Where Month([Date]) = 6 and Year([Date]) = 2023  Group By [Num]
     
    Select [Num],
    		Sum( Poids) PoidsJours
    		from [dbo].[Rapports] Where Month([Date]) = 6 and Year([Date]) = 2023 and Day([Date]) = 30 Group By [Num]
    Je souhaiterai savoir comment pouvoir concaténer les différents résultats dans un seul tableau de réponse de ce format la:

    Num Poids Total Poids Annee Poids Mois Poids Jour
    1001 50,6 50,6 50,6 50,6
    1003 47,2 47,2 23,6 23,6

    Merci d'avance.

    Dom.

  2. #2
    Membre éclairé
    Avatar de Wachter
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2008
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 404
    Points : 734
    Points
    734
    Par défaut
    Bonjour,

    Vu que tu utilises une seule table, je dirais qu'une seule requête suffit. Après, si tu souhaites conserver la logique de plusieurs requêtes, tu pourras les fusionner via l'opérateur UNION ALL en complétant les « trous ».

  3. #3
    Membre expérimenté Avatar de AaâÂäÄàAaâÂäÄàAaâÂäÄ
    Homme Profil pro
    db@
    Inscrit en
    Septembre 2021
    Messages
    533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : db@

    Informations forums :
    Inscription : Septembre 2021
    Messages : 533
    Points : 1 562
    Points
    1 562
    Par défaut
    Une façon rapide de transformer tout ça pour les 2 premières requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ; WITH SR1 AS (Select [Num],
    		Sum( Poids) PoidsTotal
    		from [dbo].[Rapports] Group By [Num] 
    ) , SR2 AS ( Select [Num],
    		Sum( Poids) PoidsAnnee
    		from [dbo].[Rapports] Where Year([Date]) = 2023  Group By [Num]
    )
    select SR1.Num, SR1.PoidsTotal, SR2.PoidsAnnee
    FROM SR1
    INNER JOIN SR2 on SR1.Num = SR2.Num
    Code non testé mais l'esprit est là

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien en process industriel
    Inscrit en
    Février 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien en process industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Bonjour Watcher,

    Citation Envoyé par Wachter Voir le message
    Bonjour,

    Vu que tu utilises une seule table, je dirais qu'une seule requête suffit. Après, si tu souhaites conserver la logique de plusieurs requêtes, tu pourras les fusionner via l'opérateur UNION ALL en complétant les « trous ».
    Je ne souhaite pas forcement garder les 4 requêtes . C'est pour l'instant le seul moyen que j'ai trouver le résultat.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Points : 18 395
    Points
    18 395
    Par défaut
    En déplaçant la logique des filtres dans des cases :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      select [Num]
           , sum(Poids)                                                                                          as PoidsTotal
           , sum(case when Year([Date]) = 2023                                            then Poids else 0 end) as PoidsAnne
           , sum(case when Year([Date]) = 2023 and Month([Date]) = 6                      then Poids else 0 end) as PoidsMois
           , sum(case when Year([Date]) = 2023 and Month([Date]) = 6 and Day([Date]) = 30 then Poids else 0 end) as PoidsJours
        from [dbo].[Rapports]
    group by [Num]
    order by [Num];

  6. #6
    Membre à l'essai
    Homme Profil pro
    Technicien en process industriel
    Inscrit en
    Février 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien en process industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Résolu
    Bonjour ,

    Waldar ,AaâÂäÄàAaâÂäÄàAaâÂäÄ, merci pour les réponses c'est exactement ce que je cherchais.

    Du coup j'ai deux solutions.

    D'apres le code de Waldar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      select [Num],[Nom]
           , sum(Poids)                                                                                          as Total
           , sum(case when Year([Date]) = 2023                                            then Poids else 0 end) as Anne
           , sum(case when Year([Date]) = 2023 and Month([Date]) = 6                      then Poids else 0 end) as Mois
           , sum(case when Year([Date]) = 2023 and Month([Date]) = 6 and Day([Date]) = 30 then Poids else 0 end) as Jours
    	   , sum(case when [Date] between Convert(datetime,'2023-06-30 08:00:00.000',20) and  Convert(datetime,'2023-07-03 17:00:00',20) then Poids else 0 end )	as 'Période indiqué'
    	   , Sum(case when DATEPART(Wk,[Date]) = DATEpart(wk,'26-06-2023') Then Poids else 0 End) as Semaine
        from [dbo].[Rapports]
    group by [Num],[Nom]
    order by [Num];
    D'apres le Code AaâÂäÄàAaâÂäÄàAaâÂäÄ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     WITH SR1 AS (Select [Num],[nom],
    		Sum( Poids) PoidsTotal
    		from [dbo].[Rapports] Group By [Num] , [nom]
    ) , SR2 AS ( Select [Num],[nom],
    		Sum( Poids) PoidsAnnee
    		from [dbo].[Rapports] Where Year([Date]) = 2023  Group By [Num], [nom]
    ), SR3 AS ( Select [Num],[nom],
    		Sum( Poids) PoidsMois
    		from [dbo].[Rapports] Where Month([Date]) = 6 and Year([Date]) = 2023  Group By [Num], [nom]
    ), SR4 as (Select [Num],[nom],
    		Sum( Poids) PoidsJours
    		from [dbo].[Rapports] Where Month([Date]) = 6 and Year([Date]) = 2023 and Day([Date]) = 30 Group By [Num], [nom]
    ), SR5 as (Select [Num],[nom],
    		Sum( Poids) PoidsSel
    		from [dbo].[Rapports] Where [Date] between Convert(datetime,'2023-06-30 08:00:00.000',20) and  Convert(datetime,'2023-07-03 17:00:00',20)  Group By [Num], [nom]
    ),SR6 as (Select [Num],
    		Sum( Poids) PoidsSemaine
    		from [dbo].[Rapports] Where DATEPART(Wk,[Date]) = DATEpart(wk,'26-06-2023')  Group By [Num]
    )
    select SR1.Num,SR1.nom,  ISNull(SR1.PoidsTotal,0) As Total, ISNull(SR2.PoidsAnnee,0) as Annee , ISNull(SR3.PoidsMois,0) As Mois, ISNull(SR4.PoidsJours,0) As Jours , ISNull(SR5.PoidsSel,0) As 'Période indiqué', ISNull(SR6.PoidsSemaine,0) As 'Semaine'
    FROM SR1 
    FULL OUTER JOIN SR2 on SR1.Num = SR2.Num
    FULL OUTER JOIN SR3 on SR1.Num = SR3.Num
    FULL OUTER JOIN SR4 on SR1.Num = SR4.Num
    FULL OUTER JOIN SR5 on SR1.Num = SR5.Num
    FULL OUTER JOIN SR6 on SR1.Num = SR6.Num
    order by num
    La solutions de Waldar est plus simple mais aussi fonctionnel que celle de AaâÂäÄàAaâÂäÄàAaâÂäÄ.

    Merci Tout le monde.

  7. #7
    Membre expérimenté Avatar de AaâÂäÄàAaâÂäÄàAaâÂäÄ
    Homme Profil pro
    db@
    Inscrit en
    Septembre 2021
    Messages
    533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : db@

    Informations forums :
    Inscription : Septembre 2021
    Messages : 533
    Points : 1 562
    Points
    1 562
    Par défaut
    Ma méthode est quick and dirty.
    Privilégie celle de Waldar qui a pris le temps d'écrire ça proprement. C'est aussi plus simple à maintenir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/12/2018, 15h13
  2. [MVC] Date sur 3 champs (select) Jour / mois / année
    Par garthos dans le forum Spring Web
    Réponses: 0
    Dernier message: 21/09/2013, 11h43
  3. Date en format Jour/Mois/Année sur SQL server 2K5 Anglais
    Par YoussefTS dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 19/11/2008, 12h03
  4. Jour Mois anné, heure minute et seconde...
    Par SangKou dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 29/11/2005, 14h43
  5. [Dates] Jour Mois anné, heure minute et seconde...
    Par SangKou dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2005, 09h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo