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

Langage SQL Discussion :

Ajout d'une requête SELECT d'un stock dans une autre requête.


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 46
    Points : 26
    Points
    26
    Par défaut Ajout d'une requête SELECT d'un stock dans une autre requête.
    Bonjour,

    je cherche depuis quelques jours à rajouter une somme dans un des update, mais je ne vois pas comment faire. Ci-dessous lot de requêtes principales (concernant un inventaire), cela fonctionne correctement. Donc j'aimerais rajouter dans la requête 1, le stock de l'année précédente. Je pensais faire un SELECT AB_INVENTAIRE.STOCK FROM AB_INVENTAIRE WHERE ANNEE=2008-1 et que l'article corresponde bien.

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    insert into AB_INVENTAIRE (ARTICLE) (select CodeArticle from ARTICLE WHERE typeproduit=2); 
    update AB_INVENTAIRE SET ANNEE=2008 
    	WHERE ANNEE='0'
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.QUANTITE_LANCEE = (SELECT SUM(QtiteFabNonEntSk)
                            FROM ETEMPS e, LCTE l
                            WHERE l.codearticle=AB_INVENTAIRE.ARTICLE
    			AND YEAR(e.DateTravail)=2008
                            AND e.CodeLanctimprod=l.CodeLancement
                            AND e.CodePoste IN ('MOUA','MOUB','MOUC','MOUP','MOUQ'))
    WHERE EXISTS (SELECT 1 FROM ETEMPS e, LCTE l
                            WHERE l.codearticle=AB_INVENTAIRE.ARTICLE
    			AND YEAR(e.DateTravail)=2008
                            AND e.CodeLanctimprod=l.CodeLancement
                            AND e.CodePoste IN ('MOUA','MOUB','MOUC','MOUP','MOUQ'))
    			and ANNEE=2008;
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.QUANTITE_LANCEE_SOLDEE = (SELECT SUM(QtiteFabNonEntSk)
                            FROM ETEMPS e, LCTE l
                            WHERE l.codearticle=AB_INVENTAIRE.ARTICLE
    			AND YEAR(e.DateTravail)=2008
                            AND e.CodeLanctimprod=l.CodeLancement
    			and l.LancementSolde='O'
                            AND e.CodePoste IN ('MOUA','MOUB','MOUC','MOUP','MOUQ'))
     
    WHERE EXISTS (SELECT 1 FROM ETEMPS e, LCTE l
                            WHERE l.codearticle=AB_INVENTAIRE.ARTICLE
    			AND YEAR(e.DateTravail)=2008
                            AND e.CodeLanctimprod=l.CodeLancement
    			and l.LancementSolde='O'
                            AND e.CodePoste IN ('MOUA','MOUB','MOUC','MOUP','MOUQ')
    			and ANNEE=2008);
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.QUANTITE_LANCEE_NON_SOLDEE = (SELECT SUM(QtiteFabNonEntSk)
                            FROM ETEMPS e, LCTE l
                            WHERE l.codearticle=AB_INVENTAIRE.ARTICLE
    			AND YEAR(e.DateTravail)=2008
                            AND e.CodeLanctimprod=l.CodeLancement
    			and l.LancementSolde='N'
                            AND e.CodePoste IN ('MOUA','MOUB','MOUC','MOUP','MOUQ'))
     
    WHERE EXISTS (SELECT 1 
                  		FROM ETEMPS e, LCTE l
                  		WHERE l.codearticle=AB_INVENTAIRE.ARTICLE
    			AND YEAR(e.DateTravail)=2008
                            AND e.CodeLanctimprod=l.CodeLancement
    			and l.LancementSolde='N'
                            AND e.CodePoste IN ('MOUA','MOUB','MOUC','MOUP','MOUQ')
    		and ANNEE=2008
                  );
     
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.QUANTITE_EXPEDIEE = (SELECT SUM(QuantiteExpediee)
                            FROM BDEC
                            WHERE BDEC.codearticleprestto=AB_INVENTAIRE.ARTICLE
    			AND YEAR(BDEC.DateCreationMvt)=2008
    			and ANNEE=2008
                            )
    WHERE EXISTS (SELECT 1 
    			FROM BDEC
                            WHERE BDEC.codearticleprestto=AB_INVENTAIRE.ARTICLE
    			AND YEAR(BDEC.DateCreationMvt)=2008
    			and ANNEE=2008
                  );
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.QUANTITE_EXPEDIEE_SOLDEE = (SELECT SUM(BDEC.QuantiteExpediee)
                            FROM BDEC
                            WHERE BDEC.codearticleprestto=AB_INVENTAIRE.ARTICLE
    			AND YEAR(BDEC.DateCreationMvt)=2008
    			and (BDEC.Ajustement='O' or BDEC.Ajustement='O')
    and ANNEE=2008
     
                            )
    WHERE EXISTS (SELECT 1 
    FROM BDEC
                            WHERE BDEC.codearticleprestto=AB_INVENTAIRE.ARTICLE
    			AND YEAR(BDEC.DateCreationMvt)=2008
    			and (BDEC.Ajustement='O' or BDEC.Ajustement='O')
    			and ANNEE=2008
     
                  );
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.QUANTITE_EXPEDIEE_NON_SOLDEE = (SELECT SUM(BDEC.QuantiteExpediee)
                            FROM BDEC
                            WHERE BDEC.codearticleprestto=AB_INVENTAIRE.ARTICLE
    			AND YEAR(BDEC.DateCreationMvt)=2008
    			and (BDEC.Ajustement='N' or BDEC.Ajustement='n')
    and ANNEE=2008
                            )
    WHERE EXISTS (SELECT 1 FROM BDEC
                            WHERE BDEC.codearticleprestto=AB_INVENTAIRE.ARTICLE
    			AND YEAR(BDEC.DateCreationMvt)=2008
    			and (BDEC.Ajustement='N' or BDEC.Ajustement='n')
    		        and ANNEE=2008
                  );
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.QUANTITE_REBUTEE = (SELECT SUM(Quantite)
                            FROM GPSQL.AB_REBUT_LCT
                            WHERE GPSQL.AB_REBUT_LCT.CodeRubrique=AB_INVENTAIRE.ARTICLE
    			AND YEAR(GPSQL.AB_REBUT_LCT.Date)=2008
                            )
    WHERE EXISTS (SELECT 1  FROM GPSQL.AB_REBUT_LCT
                            WHERE GPSQL.AB_REBUT_LCT.CodeRubrique=AB_INVENTAIRE.ARTICLE
    			AND YEAR(GPSQL.AB_REBUT_LCT.Date)=2008
    		        and ANNEE=2008
                  );
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.QUANTITE_REBUTEE_SOLDEE = (SELECT SUM(Quantite)
                            FROM GPSQL.AB_REBUT_LCT, LCTE
                            WHERE GPSQL.AB_REBUT_LCT.CodeRubrique=AB_INVENTAIRE.ARTICLE
    			AND YEAR(GPSQL.AB_REBUT_LCT.Date)=2008
    			AND GPSQL.AB_REBUT_LCT.CodeLct=LCTE.CodeLancement
    			AND LCTE.LANCEMENTSOLDE='O'
                            )
    WHERE EXISTS (SELECT 1 FROM GPSQL.AB_REBUT_LCT, LCTE
                            WHERE GPSQL.AB_REBUT_LCT.CodeRubrique=AB_INVENTAIRE.ARTICLE
    			AND YEAR(GPSQL.AB_REBUT_LCT.Date)=2008
    			AND GPSQL.AB_REBUT_LCT.CodeLct=LCTE.CodeLancement
    			AND LCTE.LANCEMENTSOLDE='O'
    			and ANNEE=2008
                  );
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.QUANTITE_REBUTEE_NON_SOLDEE = (SELECT SUM(Quantite)
                            FROM GPSQL.AB_REBUT_LCT, LCTE
                            WHERE GPSQL.AB_REBUT_LCT.CodeRubrique=AB_INVENTAIRE.ARTICLE
    			AND YEAR(GPSQL.AB_REBUT_LCT.Date)=2008
    			AND GPSQL.AB_REBUT_LCT.CodeLct=LCTE.CodeLancement
    			AND LCTE.LANCEMENTSOLDE='N'
                            )
    WHERE EXISTS (SELECT 1 FROM GPSQL.AB_REBUT_LCT, LCTE
                            WHERE GPSQL.AB_REBUT_LCT.CodeRubrique=AB_INVENTAIRE.ARTICLE
    			AND YEAR(GPSQL.AB_REBUT_LCT.Date)=2008
    			AND GPSQL.AB_REBUT_LCT.CodeLct=LCTE.CodeLancement
    			AND LCTE.LANCEMENTSOLDE='N'
    			and ANNEE=2008
                  );
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.ANNEE_STOCK = (SELECT MAX(YEAR(COME.Datepiece))
                            FROM COMC, COME
                            WHERE COMC.codearticleprestto=AB_INVENTAIRE.ARTICLE
    			and COMC.NoCommande=COME.NoCommande
    			and (YEAR(COME.Datepiece))<2008+1
     
                            )
    WHERE EXISTS (SELECT 1 FROM COMC, COME
                            WHERE COMC.codearticleprestto=AB_INVENTAIRE.ARTICLE
    			and COMC.NoCommande=COME.NoCommande
    			and (YEAR(COME.Datepiece))<2008+1
    			and ANNEE=2008);
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.NATURE_STOCK = 'STOCK VIVANT'
    WHERE AB_INVENTAIRE.ANNEE_STOCK > 2008-2
    	and ANNEE=2008;
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.NATURE_STOCK = 'STOCK MORT'
    WHERE AB_INVENTAIRE.ANNEE_STOCK < 2008-1
    	and ANNEE=2008;
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.STOCK = (	case when AB_INVENTAIRE.QUANTITE_LANCEE_SOLDEE IS NOT NULL then AB_INVENTAIRE.QUANTITE_LANCEE_SOLDEE else 0 end -
                                  	case when AB_INVENTAIRE.QUANTITE_EXPEDIEE_SOLDEE IS NOT NULL then AB_INVENTAIRE.QUANTITE_EXPEDIEE_SOLDEE else 0 end -
                                  	case when AB_INVENTAIRE.QUANTITE_REBUTEE_SOLDEE IS NOT NULL then AB_INVENTAIRE.QUANTITE_REBUTEE_SOLDEE else 0 end);
     
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.QUANTITE_PRODUITE = (	case when AB_INVENTAIRE.QUANTITE_LANCEE_NON_SOLDEE IS NOT NULL then AB_INVENTAIRE.QUANTITE_LANCEE_NON_SOLDEE else 0 end -
                                 		case when AB_INVENTAIRE.QUANTITE_EXPEDIEE_NON_SOLDEE IS NOT NULL then AB_INVENTAIRE.QUANTITE_EXPEDIEE_NON_SOLDEE else 0 end -
                                  		case when AB_INVENTAIRE.QUANTITE_REBUTEE_NON_SOLDEE IS NOT NULL then AB_INVENTAIRE.QUANTITE_REBUTEE_NON_SOLDEE else 0 end);
    REQUETE 1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE AB_INVENTAIRE
    SET AB_INVENTAIRE.STOCK = (	case when AB_INVENTAIRE.QUANTITE_LANCEE_SOLDEE IS NOT NULL then AB_INVENTAIRE.QUANTITE_LANCEE_SOLDEE else 0 end -
                                  	case when AB_INVENTAIRE.QUANTITE_EXPEDIEE_SOLDEE IS NOT NULL then AB_INVENTAIRE.QUANTITE_EXPEDIEE_SOLDEE else 0 end -
                                  	case when AB_INVENTAIRE.QUANTITE_REBUTEE_SOLDEE IS NOT NULL then AB_INVENTAIRE.QUANTITE_REBUTEE_SOLDEE else 0 end);

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Salut,

    Comme précisé par Waldar, il faut utiliser coalesce à la place des case.
    Désolé pour la lourdeur de mon précédent code (craquage ... )
    http://www.developpez.net/forums/d63...s/#post3761140

    Pour ton problème de somme j'essaie d'y revenir un peu plus tard.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    C'est pas grave pour la lourdeur du code. Mais le code que j'ai présenté fonctionne à 100%.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/06/2008, 22h47
  2. Réponses: 5
    Dernier message: 09/06/2008, 08h57
  3. Réponses: 2
    Dernier message: 05/10/2007, 23h49
  4. executer une procedure stockées dans une requete SELECT
    Par bleuerouge dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/08/2006, 17h23
  5. Requête SELECT avec deux champs dans une colonne ??
    Par fredhali2000 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 08/06/2006, 10h41

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