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 :

boucle for pour une requete


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut boucle for pour une requete
    Bonjour

    J'ai trois table T1, T2 et T3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select  startdate, enddate  from T1 : 
     
     me donne 
     
    startdate                 enddate  
     
    10.10.2009               11.12.2009               
    16.12.2009               11.01.2010  
    12.01.2010               11.02.2010
    pour chaque couple (a,b) je dois faire les deux requete suivante :
    faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert  into T3  select * from T2   X where X.datetime  between startdate       and   enddate
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select sum(..)  as  S from T3 where ...
    A chaque fois j'ai une valeur S. (pour la valeur actuelle du couple (startDate, enddate)).

    puis à la fin je fais la somme de ces valeurs.

    J'ai essayé de faire le tout en une seule requete mais j'y arrive pas ..
    une procédure stockée avec une boucle For?

  2. #2
    Membre régulier Avatar de Doracle
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2010
    Messages : 60
    Points : 74
    Points
    74
    Par défaut
    La clause "RETURNING" peut peut-être t'aider, elle permet de faire un ordre SELECT a la suite d'un INSERT/UPDATE/DELETE dans le but de vérifier la transaction.

    En voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE employees
    SET salary = salary * 1.1
    WHERE employee_id = 100
    RETURNING last_name, salary INTO name, new_sal;
    Adapté a ton cas cela pourrait donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT  INTO T3  
    SELECT * 
    FROM T2 X 
    WHERE X.datetime BETWEEN startdate AND enddate
    RETURNING sum(..) INTO varsum;
    Par contre, vu qu'il y a un INTO, il te faut une variable, donc une procédure stockée est préférable. Je te laisse tester.

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Doracle Voir le message
    La clause "RETURNING" peut peut-être t'aider, elle permet de faire un ordre SELECT a la suite d'un INSERT/UPDATE/DELETE dans le but de vérifier la transaction.

    En voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE employees
    SET salary = salary * 1.1
    WHERE employee_id = 100
    RETURNING last_name, salary INTO name, new_sal;
    Adapté a ton cas cela pourrait donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT  INTO T3  
    SELECT * 
    FROM T2 X 
    WHERE X.datetime BETWEEN startdate AND enddate
    RETURNING sum(..) INTO varsum;
    Par contre, vu qu'il y a un INTO, il te faut une variable, donc une procédure stockée est préférable. Je te laisse tester.
    merci

    comme je suis pas for en procedure stocke..avec le langage T-SQL , avez vous des tutorials T- SQL ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Pour le transact sql c'est :
    http://sqlpro.developpez.com/cours/s...r/transactsql/

    Pour ta première étape remplissage de T3, un simple insert into select pourrait probablement suffire, mais il nous faudrait la structure de T2 et de T3. Quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT  INTO T3 (Col1,col2,Col3,) SELECT ColA,colB FROM T2 
    inner join T1 ON T2.datetime  BETWEEN startdate       AND   enddate
    Quand à ta somme je n'ai pas compris quel est le résultat souhaité.
    Donc en conclusion, l'application des règles du forum s'applique (structure des tables, sGBD utilisé, jeux d'essais,exemple du résultat attendu)
    A+
    Soazig

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par soazig Voir le message
    Bonjour,
    Pour le transact sql c'est :
    http://sqlpro.developpez.com/cours/s...r/transactsql/

    Pour ta première étape remplissage de T3, un simple insert into select pourrait probablement suffire, mais il nous faudrait la structure de T2 et de T3. Quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT  INTO T3 (Col1,col2,Col3,) SELECT ColA,colB FROM T2 
    inner join T1 ON T2.datetime  BETWEEN startdate       AND   enddate
    Quand à ta somme je n'ai pas compris quel est le résultat souhaité.
    Donc en conclusion, l'application des règles du forum s'applique (structure des tables, sGBD utilisé, jeux d'essais,exemple du résultat attendu)
    A+
    Soazig
    merci
    En procédure stockeés , ce qui permet de faire des boucle For est-ce bien les cursors?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Le cursor va te permettre de parcourir le résultat d'un select, mais je ne suis pas sure du tout que tu en ait besoin.
    Je ne peux pas en être certaine car tu n'as pas suivi les règles.
    A+
    Soazig

Discussions similaires

  1. [MySQL] Boucle FOR dans une requete Mysql
    Par skins dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/11/2011, 19h04
  2. Boucle For dans une requete SQL
    Par laurent0 dans le forum Général Python
    Réponses: 2
    Dernier message: 10/08/2011, 17h41
  3. [PHP 5.2] Boucle for pour une date
    Par zemzoum89 dans le forum Langage
    Réponses: 5
    Dernier message: 29/05/2010, 23h20
  4. [MySQL] Boucle for dans une requete avec jointure
    Par runcafre91 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/02/2010, 15h12
  5. création d'une boucle for pour interrogation requête sql
    Par philder62 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/12/2007, 15h14

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