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 :

Utiliser le résultat d'une soustraction pour commencer la seconde.


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien méthodes
    Inscrit en
    Décembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2014
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Utiliser le résultat d'une soustraction pour commencer la seconde.
    Bonjour,

    J'espère que mon intitulé est assez claire:
    Voici ma 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    with    src
        as  (   select
    convert(varchar(10),CONVERT(date,lcte.VarAlphaUtil4,103),103) as 'Date_Import',
    ARTICLE.CodeFamille,
    ARTICLE.MotDirecteur,
    article.CodeArticle,
    ARTICLE.Designation1,
    ARTICLE.QteDansStock1 as 'QTE_SILOG',
    LCTC.QteResProdstk,
    ARTICLE1.Terme3Employe,
    LCTE.VarAlphaUtil4,
    LCTE.LancementSolde,
    LCTE.DateDebutSaisie,
    LCTE.HeureDebutSaisie,
    LCTE.MinuteDebutSaisie,
    FAMRUB.VarNumUtil,
    lcte.CodeLancement,
    LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0)) as 'Date_de_Fab_planifiée',
    (LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))) - CONVERT(time, DATEADD(hour, FAMRUB.VarNumUtil, 0)) as 'Date_appro',
    convert(varchar(10),CONVERT(date,(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))) - CONVERT(time, DATEADD(hour, FAMRUB.VarNumUtil, 0)),103),103) as 'Date_a',
    FAMRUB.VarNumUtil as 'délai_retard',
    (lcte.QuantiteLancee-lcte.QteFabEntreStk)*lctc.QteUnitaireTotale as 'Qté',
    datename(DW,(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))) - CONVERT(time, DATEADD(hour, FAMRUB.VarNumUtil, 0))) as 'Jour_appro',
    datename(DW,(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))-1) - CONVERT(time, DATEADD(hour, FAMRUB.VarNumUtil, 0))) as 'Jour1',
    datepart(hh,CONVERT(time,(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))) - CONVERT(time, DATEADD(hour, FAMRUB.VarNumUtil, 0)))) as 'heure',
    convert(varchar(10),CONVERT(datetime,((LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))) - CONVERT(time, DATEADD(hour, FAMRUB.VarNumUtil, 0))),103),103) as 'JourR',
    convert(varchar(10),CONVERT(datetime,((LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))-1) - CONVERT(time, DATEADD(hour, FAMRUB.VarNumUtil, 0))),103),103) as 'JourR1',
    datename(DW,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) as [test jour],
    datepart(HH,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) as [test heure],
    LCTE.MinuteDebutSaisie as [test minute],
    case
    when datename(DW,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) in ('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi')			and ((datepart(HH,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) >='0' and LCTE.MinuteDebutSaisie <= '59') and  (datepart(HH,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) <'7' and LCTE.MinuteDebutSaisie <= '59'))			then convert(varchar(10),CONVERT(date,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))-1)),103),103) + ' ' + 'navette de 19H00'
    when datename(DW,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) in ('Lundi','Mardi','Mercredi','Jeudi','Vendredi')					and ((datepart(HH,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) >='7' and LCTE.MinuteDebutSaisie <= '59') and  (datepart(HH,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) <'19' and LCTE.MinuteDebutSaisie <= '59'))		then convert(varchar(10),CONVERT(date,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0)))),103),103) + ' ' + 'navette de 07H00'
    when datename(DW,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) = 'Samedi'															and ((datepart(HH,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) >='7' and LCTE.MinuteDebutSaisie <= '59') and  (datepart(HH,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) <'16' and LCTE.MinuteDebutSaisie <= '59'))		then convert(varchar(10),CONVERT(date,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0)))),103),103) + ' ' + 'navette de 07H00'
    when datename(DW,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) in ('Lundi','Mardi','Mercredi','Jeudi','Vendredi')					and (datepart(HH,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) >='19' and LCTE.MinuteDebutSaisie <= '59')						 																																									then convert(varchar(10),CONVERT(date,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0)))),103),103) + ' ' + 'navette de 19H00'
    when datepart(HH,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) ='0'																	and datename(DW,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) in ('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi')																																											then convert(varchar(10),CONVERT(date,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))-1)),103),103) + ' ' + 'navette de 19H00' 
    when datepart(HH,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) ='0'																	and datename(DW,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) = 'Dimanche'																																																							then convert(varchar(10),CONVERT(date,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))-1)),103),103) + ' ' + 'navette de 16H00' 
    when datename(DW,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) in ('Samedi','Dimanche')												and (datepart(HH,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) >='16' and LCTE.MinuteDebutSaisie <= '59')																																															then convert(varchar(10),CONVERT(date,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0)))),103),103) + ' ' + 'navette de 16H00'
    when datename(DW,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) = 'Dimanche'															and (datepart(HH,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))))) <'16' and LCTE.MinuteDebutSaisie <= '59')																																															then convert(varchar(10),CONVERT(date,DATEADD(HOUR,(-1*FAMRUB.VarNumUtil),(LCTE.DateDebutSaisie + CONVERT(time, DATEADD(hour, LCTE.HeureDebutSaisie, 0))-1)),103),103) + ' ' + 'navette de 16H00'
    Else 'y a un Bug'
    END as 'navette'
    FROM ARTICLE
    inner join LCTC on LCTC.CodeRubrique=ARTICLE.CodeArticle
    inner join LCTE on LCTE.CodeLancement=LCTC.CodeLancement
    inner join Article as ARTICLE1 on ARTICLE1.codearticle=LCTE.codearticle
    inner join FAMRUB on FAMRUB.CodeFamille=ARTICLE.CodeFamille
    )
    SELECT
    src.DateDebutSaisie,
    src.HeureDebutSaisie,
    src.MinuteDebutSaisie,
    src.[test jour],
    src.[test heure],
    src.[test minute],
    src.VarNumUtil,
    src.MotDirecteur,
    src.CodeArticle,
    src.Designation1,
    round(sum(src.Qté),0) as 'Qté',
    src.QTE_SILOG as 'stock',
    src.navette,
    CONVERT(datetime,SUBSTRING(src.navette,1,10),103) as 'DATE'
    FROM src
    WHERE src.LancementSolde='N' AND src.CodeFamille = 'EMB' and src.DateDebutSaisie is not null and src.VarAlphaUtil4<>''
    and (convert(varchar(10),CONVERT(date,src.VarAlphaUtil4,103),103)=convert(varchar(10),CONVERT(date,GETDATE(),103),103) or convert(varchar(10),CONVERT(date,src.VarAlphaUtil4,103),103)=convert(varchar(10),CONVERT(date,GETDATE()-1,103),103))
    and src.Terme3Employe in ('6110','6120','6140','6150','6160','6170','6180')
    group by src.CodeArticle,src.navette, src.MotDirecteur, src.Designation1,CONVERT(datetime,SUBSTRING(src.navette,1,10),103),src.QTE_SILOG,src.DateDebutSaisie,src.HeureDebutSaisie,src.MinuteDebutSaisie,src.[test jour],src.[test heure],src.[test minute],src.VarNumUtil
    order BY CONVERT(datetime,SUBSTRING(src.navette,1,10),103)desc,src.MotDirecteur
    le résultat donne cela :
    Nom : Nouvelle image bitmap.jpg
Affichages : 139
Taille : 547,8 Ko

    Ma question est :
    Je voudrais savoir si cela est possible de faire la soustraction du champs "Qté" dans l'ordre du champs "date" tout le temps que l'on arrive pas à stock = 0, et ainsi n'afficher que ceux d’après.

    Merci d'avance, pour votre aide, dites moi si je suis assez clair.

    Mathieu

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    Pas sûr de comprendre ce que vous voulez faire, mais ceci devrait vous aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SUM(Qte) OVER(ORDER BY Date)
    Ceci fera votre somme cumulée que vous pourrez soustraire à votre stock.

    Il faudra en revanche imbriquer le tout dans une autre CTE si vous voulez appliquer un filtre sur le résultat de ce calcul, les fonctions fenêtrées n'étant pas applicables directement dans la clause WHERE

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien méthodes
    Inscrit en
    Décembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2014
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    merci d'essayer de m'aider mais je ne connais pas la sum() avec over.

    Je vais essayer de faire plus claire !

    Nom : Nouvelle image bitmap.jpg
Affichages : 128
Taille : 159,7 Ko

    J'ai omis de vous dire que je ressors de ma requête en Tableau dynamique, je voudrais que les valeur en rouge ne s'affiche pas tout le temps que l'on arrive pas à la valeur du stock ( c'est un tableau de commande) sur la 1ere ligne ou j'ai mis des couleurs, j'ai 2000 pièces en stock et j'ai besoin de 840p le 31/03/17 donc il ne faudrait pas que je les vois car j'en ai plus en stock et idem pour ceux du 03/04/17 car 840+840=1680 c'est plus petit que 2000.
    et sur mon 2eme exemple les 1728 doivent être en rouge et il ne faudrait que mes besoins n’apparaissent qu'a partir du 1344 car 3216+1920+1728=6864 c'est plus petit que 8000 en stock.

    en espérant avoir été plus clair.

  4. #4
    Membre régulier Avatar de keketteboy
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    En fait, si j'ai bien compris, tu souhaites n'afficher que les lignes dont la somme de Quantité est supérieure ou égale à ton Stock en agrégeant sur le MotDirecteur ? Je pense qu'il y a une piste à creuser avec des boucles WHILE mais par contre, il faudrait que tu me donnes ta clé fonctionnelle sur le résultat de ta requête : qu'est-ce qui rend ta ligne unique ?
    Haï-Ha TRINH-VU, Consultant MS BI.

    "L'expérience est une lanterne attachée dans notre dos, qui n'éclaire que le chemin parcouru."
    "Lorsque l'on se cogne la tête contre un pot et que cela sonne creux, ça n'est pas forcément le pot qui est vide."

    Confucius

    Merci de cliquer sur si la réponse apportée est celle attendue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/07/2011, 14h34
  2. Réponses: 2
    Dernier message: 11/03/2011, 21h17
  3. Réponses: 7
    Dernier message: 24/06/2010, 16h38
  4. Réponses: 4
    Dernier message: 15/04/2008, 11h43
  5. Utilisation du résultat d'une requête
    Par Manu14400 dans le forum Access
    Réponses: 1
    Dernier message: 15/10/2005, 13h01

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