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 :

SELECT de deux valeurs sur une plage de données


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut SELECT de deux valeurs sur une plage de données
    Salut le forum j'ai la requête suivante qui me permet de déterminer les ventes journalier et les écarts:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT DISTINCT MONTH(V.[Date_Operation]) AS MOIS,YEAR(V.[Date_Operation]) AS ANNEE, V.Date_Operation,V.IDCLIENT,V.IDPRODUIT,sum(ENTTREE) AS ENTTREE
    	,SUM(SORTIE) AS SORTIE,SUM(RC) AS RC,(COALESCE(S.QUANTITE,0)) AS JAUGE
    	, (sum(COALESCE(ENTTREE,0))+(COALESCE(QUANTITE,0))-SUM(COALESCE(SORTIE,0))+SUM(COALESCE(RC,0)))  AS ETAT_STOCK
    	, CASE WHEN  LEAD((COALESCE(S.QUANTITE,0))) OVER(PARTITION BY V.IDPRODUIT, V.IDCLIENT ORDER BY  V.Date_Operation)>0 THEN LEAD((COALESCE(QUANTITE,0))) OVER(PARTITION BY V.IDPRODUIT, V.IDCLIENT ORDER BY  V.[Date_Operation])-(sum(COALESCE(ENTTREE,0))+(COALESCE(QUANTITE,0))-SUM(COALESCE(SORTIE,0))+SUM(COALESCE(RC,0))) END  AS ECART
    FROM [VGESTIONSORTIESTATIONS] V
    	LEFT JOIN [VVSTOCKDEBUTPARCUVEETPARSTATION] S ON S.IDCLIENT=V.IDCLIENT AND S.IDPRODUIT=V.IDPRODUIT AND S.Date_Operation=V.Date_Operation
    	INNER JOIN [CLIENT] C ON C.IDCLIENT=V.IDCLIENT
    	INNER JOIN [PRODUITSS] P ON P.IDPRODUIT=V.IDPRODUIT
     
    WHERE V.[IDCLIENT]='CL17' AND V.[Date_Operation] BETWEEN '2018-01-04' AND '2018-01-07' AND MONTH(V.[Date_Operation])!='' and V.[Date_Operation]!=''
    GROUP BY V.Date_Operation,V.IDCLIENT,V.IDPRODUIT,S.Date_Operation,[QUANTITE]
    GO
    Nom : jjjjjj.PNG
Affichages : 709
Taille : 28,2 Ko
    à partir de la requête ci-dessus j'ai déterminer la somme sur une période bien déterminer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT [IDCLIENT], [IDPRODUIT]
    , MIN([Date_Operation]) AS DATEDEBUT
    ,MAX([Date_Operation]) AS DATEFIN
    ,SUM([ENTTREE]) AS RECEPTION
    ,SUM([SORTIE]) AS SORTIE
    ,SUM([RC]) AS RC
    ,SUM([SORTIE]-[RC]) AS VENTES
    ,SUM([ECART]) AS [ECART]
    FROM [dbo].[SUIVISTOCKSSTATIONS]
    WHERE [IDCLIENT]='CL17' AND [Date_Operation] BETWEEN '2018-01-04' AND '2018-11-29'
    GROUP BY [IDCLIENT], [IDPRODUIT]
    Nom : hhhh.PNG
Affichages : 600
Taille : 8,2 Ko
    je souhaite modifier cette requête pour sélectionner la valeur jauge au '2018-01-01' et au '2018-01-07' mais je ne sais comment faire, pouvez vous m'aider?

  2. #2
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 135
    Points
    135
    Par défaut
    Bonjour,
    Qu'appelez-vous la valeur jauge ?
    S'il s'agit de changer l'encadrement du temps, il ne s'agit pas simplement de changer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Date_Operation] BETWEEN '2018-01-04' AND '2018-11-29'
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Date_Operation] BETWEEN '2018-01-01' AND '2018-01-07'
    ??

  3. #3
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Bonjour jmclej voilà j'ai requête suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT [IDCLIENT], [IDPRODUIT]
    , MIN([Date_Operation]) AS DATEDEBUT
    ,MAX([Date_Operation]) AS DATEFIN
    ,SUM([ENTTREE]) AS RECEPTION
    ,SUM([SORTIE]) AS SORTIE
    ,SUM([RC]) AS RC
    ,SUM([SORTIE]-[RC]) AS VENTES
    ,SUM([ECART]) AS [ECART]
    ,[JAUGE]
    FROM [dbo].[SUIVISTOCKSSTATIONS]
    WHERE [IDCLIENT]='CL17' AND [Date_Operation] BETWEEN '2018-01-04' AND '2018-11-29'
    GROUP BY [IDCLIENT], [IDPRODUIT],[JAUGE]
    je voudrais dans cette requête obtenir pour la colonne '[JAUGE]' juste la valeur correspondant au '2018-01-04' et au '2018-11-29' mais je ne sais pas comment faire

  4. #4
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 135
    Points
    135
    Par défaut
    Ok, vous voulez donc 2 colonnes en plus en fait.
    Dans ce cas je passerais par du select imbriqué. Ca donnerait quelque chose qui comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT [IDCLIENT], [IDPRODUIT]
    , MIN([Date_Operation]) AS DATEDEBUT
    ,MAX([Date_Operation]) AS DATEFIN
    ,SUM([ENTTREE]) AS RECEPTION
    ,SUM([SORTIE]) AS SORTIE
    ,SUM([RC]) AS RC
    ,SUM([SORTIE]-[RC]) AS VENTES
    ,SUM([ECART]) AS [ECART]
    ,(select ... from ... where ... and [Date_Operation] = '2018-01-01') as JAUGE1
    ,(select ... from ... where ... and [Date_Operation] = '2018-01-07') as JAUGE2
    FROM [dbo].[SUIVISTOCKSSTATIONS]
    WHERE [IDCLIENT]='CL17' AND [Date_Operation] BETWEEN '2018-01-04' AND '2018-11-29'
    GROUP BY [IDCLIENT], [IDPRODUIT]

  5. #5
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Merci jmclej mais lorsque j'utilise la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT [IDCLIENT], [IDPRODUIT]
    , MIN([Date_Operation]) AS DATEDEBUT
    ,MAX([Date_Operation]) AS DATEFIN
    ,SUM([ENTTREE]) AS RECEPTION
    ,SUM([SORTIE]) AS SORTIE
    ,SUM([RC]) AS RC
    ,SUM([SORTIE]-[RC]) AS VENTES
    ,SUM([ECART]) AS [ECART]
    ,(SELECT [JAUGE] FROM SUIVISTOCKSSTATIONS WHERE [IDCLIENT]='CL17' AND [Date_Operation]='2018-01-04' ) AS JAUGEDEPART
    ,(SELECT [JAUGE] FROM SUIVISTOCKSSTATIONS WHERE [IDCLIENT]='CL17' AND [Date_Operation]='2018-11-29' ) AS JAUGEFIN
    FROM [dbo].[SUIVISTOCKSSTATIONS]
    WHERE [IDCLIENT]='CL17' AND [Date_Operation] BETWEEN '2018-01-04' AND '2018-11-29'
    GROUP BY [IDCLIENT], [IDPRODUIT]
    j'ai l'erreur suivant:
    Nom : Capturegffgg.PNG
Affichages : 580
Taille : 7,7 Ko

  6. #6
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 135
    Points
    135
    Par défaut
    Comme l'erreur l'indique, le résultat des 2 selects imbriqué ne doit retourner qu'une seule valeur effecivement puisque chacune ne sera affichée quand dans un seul champs du resultset. Par rapport au message, vous êtes dans le cas ou le select imbriqué est utilisé comme une expression.
    Vous devez donc modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [JAUGE] FROM SUIVISTOCKSSTATIONS WHERE [IDCLIENT]='CL17' AND [Date_Operation]='2018-01-04'
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [JAUGE] FROM SUIVISTOCKSSTATIONS WHERE [IDCLIENT]='CL17' AND [Date_Operation]='2018-11-29'
    pour que chacun de ces selects ne retourne qu'une seul valeur. Rajoutez des conditions dans le where ou rajoutez un distinct ou un aggrégat sum/avg/min/max ou des group by mais le résultat renvoie trop d'éléments pour l'heure.

  7. #7
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    salut jmclej même en ajoutant des agrégats j'obtient la même erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT [IDCLIENT], [IDPRODUIT]
    , MIN([Date_Operation]) AS DATEDEBUT
    ,MAX([Date_Operation]) AS DATEFIN
    ,SUM([ENTTREE]) AS RECEPTION
    ,SUM([SORTIE]) AS SORTIE
    ,SUM([RC]) AS RC
    ,SUM([SORTIE]-[RC]) AS VENTES
    ,SUM([ECART]) AS [ECART]
    ,(SELECT distinct max(COALESCE([JAUGE],0)) FROM SUIVISTOCKSSTATIONS WHERE [IDCLIENT]='CL17' AND [Date_Operation]='2018-01-04' GROUP BY [IDCLIENT], [IDPRODUIT]) AS JAUGEDEPART
    FROM [dbo].[SUIVISTOCKSSTATIONS]
    WHERE [IDCLIENT]='CL17' AND [Date_Operation] BETWEEN '2018-01-04' AND '2018-01-04'
    GROUP BY [IDCLIENT], [IDPRODUIT]

  8. #8
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 135
    Points
    135
    Par défaut
    Oubliez la requête globale et n'exécutez que le select imbriqué.
    Tant que le résultat sera supérieur à une ligne, cela ne fonctionnera pas. Il m'est imossible de vous dire comment doit être cette requête sans connaître votre base précisément et ce qu'est supposé retourner votre "jauge" malheureusement. Il ne faut pas rajouter les élément s pour les rajouter, il faut que cela représente ce que vous voulez évidemment.

  9. #9
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    j'ai finalement compris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT [IDCLIENT], [IDPRODUIT]
    , MIN([Date_Operation]) AS DATEDEBUT
    ,MAX([Date_Operation]) AS DATEFIN
    ,SUM([ENTTREE]) AS RECEPTION
    ,SUM([SORTIE]) AS SORTIE
    ,SUM([RC]) AS RC
    ,SUM([SORTIE]-[RC]) AS VENTES
    ,SUM([ECART]) AS [ECART]
     
    ,(SELECT distinct avg(COALESCE([JAUGE],0)) FROM SUIVISTOCKSSTATIONS WHERE [IDCLIENT]='CL17' AND [Date_Operation]='2018-01-04' and ([IDPRODUIT]='SUP01') GROUP BY [IDCLIENT], [IDPRODUIT]) AS JAUGEDEPARTSUPER
     
    FROM [dbo].[SUIVISTOCKSSTATIONS]
    WHERE [IDCLIENT]='CL17' AND[Date_Operation] BETWEEN '2018-01-04' AND '2018-11-29'
    GROUP BY [IDCLIENT], [IDPRODUIT]
    Nom : rodrigue.PNG
Affichages : 570
Taille : 10,6 Ko
    le seul regret est que je suis obligé de une ligne de select par produit n’y-t-il pas de possibilité de grouper par produit?

  10. #10
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Mon objectif est de sélectionner la valeur [JAUGE] égale à '2018-01-04' et la valeur [JAUGE] égale à '2018-11-29',
    le cumul , MIN([Date_Operation]) AS DATEDEBUT
    ,MAX([Date_Operation]) AS DATEFIN
    ,SUM([ENTTREE]) AS RECEPTION
    ,SUM([SORTIE]) AS SORTIE
    ,SUM([RC]) AS RC
    ,SUM([SORTIE]-[RC]) AS VENTES
    ,SUM([ECART]) AS [ECART]
    compris entre [Date_Operation] BETWEEN '2018-01-04' AND '2018-11-29' et dans une même requête

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/11/2018, 14h49
  2. Réponses: 4
    Dernier message: 17/05/2017, 07h31
  3. [XL-2003] Tester présence d'une valeur sur une plage donnée
    Par Monsieur Peck dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/04/2010, 19h51
  4. Réponses: 1
    Dernier message: 23/09/2009, 04h23
  5. Somme avec condition et affectation de valeur sur une plage
    Par thierryakaguy dans le forum Excel
    Réponses: 12
    Dernier message: 31/07/2009, 16h07

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