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

Access Discussion :

[SQL] Ajout d'un compteur dans une requete


Sujet :

Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 9
    Points
    9
    Par défaut [SQL] Ajout d'un compteur dans une requete
    Bonjour,

    Je me permets de poster içi car je souhaiterai savoir s'il était possible de créer un compteur au sein d'une requete SELECT. Je m'explique:

    Je travaille sur une base de données de laquelle j'extrait une partie des colonnnes et auxquelles j'adjoins les infos d'une autre table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT FERMATE.DATA, Prog.LINEA, FERMATE.VEICOLO, Prog.PROGRESSIVO_FERMATE, FERMATE.COD_FERMATA_P, FERMATE.ORA_PARTENZA, FERMATE.COD_FERMATA_A, FERMATE.ORA_ARRIVO, Prog.DISTANZA 
    FROM FERMATE, 
    (SELECT PROGREZIONE.LINEA, PROGREZIONE.PROGRESSIVO_FERMATE, PROGREZIONE.FERM_PART, PROGREZIONE.DISTANZA
    FROM PROGREZIONE
    WHERE (PROGREZIONE.LINEA="23 A" Or PROGREZIONE.LINEA="23 R") And (PROGREZIONE.CARTEGGIO Is Null)) AS Prog
    WHERE FERMATE.COD_FERMATA_P=Prog.FERM_PART
    ORDER BY FERMATE.DATA, FERMATE.VEICOLO, FERMATE.ORA_PARTENZA;
    Là, ce que j'aimerai faire, c'est créer directement dans la requete (et sans devoir le faire manuellement en créant d'abbord une table, puis en créant un champ de type compteur), une fois les données ordonnées, un champ ID de type compteur, qui me donne la "position" de mes données dans le résultat de ma requete. Ceci dans le but d'automatiser le traitement de mes données.

    J'espère que mes explications ont été clairs et que vous pourrez m'aider.

    Merci,
    Thomas

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu ajoutes cette fonction à ton projet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Function did(x As Variant) As Long
    Static id As Long
    If x <> "raz" Then
    id = id + 1
    Else
    id = 0
    End If
    did = id
    End Function
    et
    select did(FERMATE.DATA) as compteur à ta requête

    nb c'est à manipuler avec précaution
    pour relancer faire préalablement un appel à did("raz")

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup, c'est exactement ce dont j'ai besoin

    Par contre, juste une toute petite question, comment est ce que je peux lancer did.(raz) dans ma requete (ou sinon, ailleurs) à un autre endroit que dans le SELECT, afin de ne pas créer artificiellement une colonne de zéro?

    Merci beaucoup,
    Thomas

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu tapes ?did("raz"") +entrée das la fenêtre éxécution
    ou tu te fais une requête select did("raz") as remisà0 FROM PROGREZIONE;

    adelante !

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Merci pour tes réponses, òa m'a un peu aidé, mais le problème est que ça se goupille pas avec le reste de ce que j'ai à faire.

    En effet, je dois utiliser le compteur à l'intérieur d'une requete intermédiaire dont je dois copier, puis modifier deux fois le résultat. Du coup, j'ai l'impressions que la fonction tourne en boucle, car est recalculée à chaque appel de ce résultat intermédiaire. Du coup, ma requete n'aboutit pas puisque ce programme boucle sur lui-meme.

    Bref, je sais pas si c'est très clair, mais je voudrais savoir s'il n'y a pas moyen d'avoir un compteur statique, qui une fois calculé ne se recalcule pas à chaque fois que le résultat de la requete est utilisé.

    Merci

    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
     
    SELECT Feuille_de_calcul.ID, Feuille_de_calcul.DATA, Feuille_de_calcul.VEICOLO, 
    Feuille_de_calcul.PROGRESSIVO_FERMATE, Feuille_de_calcul.COD_FERMATA_P, 
    Feuille_de_calcul.COD_FERMATA_A, Feuille_de_calcul.ORA_PARTENZA,
    Feuille_de_calcul.ORA_ARRIVO, (Feuille_de_calcul.ORA_ARRIVO-
    Feuille_de_calcul.ORA_PARTENZA)*86400 AS Tempo_Parcorenza, 
    IIf(Feuille_de_calcul.PROGRESSIVO_FERMATE<>1,(Feuille_de_calcul.ORA_PARTENZA - 
    Feuille_de_calcul_1.ORA_ARRIVO)*86400,Null) AS Tempo_Fermata_P,
     IIf((Feuille_de_calcul.LINEA="23 A" And Feuille_de_calcul.PROGRESSIVO_FERMATE<>35) 
    Or (Feuille_de_calcul.LINEA="23 R" And Feuille_de_calcul.PROGRESSIVO_FERMATE<>34),
    (Feuille_de_calcul_2.ORA_PARTENZA - Feuille_de_calcul.ORA_ARRIVO)*86400,Null) 
    AS Tempo_Fermata_A 
     
    FROM 
    (SELECT did("raz"), did(FERMATE.DATA) AS ID, FERMATE.DATA, Prog.LINEA, 
    FERMATE.VEICOLO, Prog.PROGRESSIVO_FERMATE, FERMATE.COD_FERMATA_P, 
    FERMATE.ORA_PARTENZA, FERMATE.COD_FERMATA_A, FERMATE.ORA_ARRIVO, 
    Prog.DISTANZA 
    FROM FERMATE, Prog
    WHERE FERMATE.COD_FERMATA_P=Prog.FERM_PART
    ORDER BY FERMATE.DATA, FERMATE.VEICOLO, FERMATE.ORA_PARTENZA) AS Feuille_de_calcul, 
     
    Feuille_de_calcul AS Feuille_de_calcul_1, Feuille_de_calcul AS Feuille_de_calcul_2
     
    WHERE (Feuille_de_calcul.ID=Feuille_de_calcul_1.ID+1) And 
    (Feuille_de_calcul.ID+1=Feuille_de_calcul_2.ID)

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    effictement la fonction tourne à chaque appel
    c'est pourquoi je disais à manier avec précaution
    d'ailleurs un simple déplacer dans le jeu d'enregistrement modifie le résultat
    c'est à réserver en création de table avec un seul appel

    il te reste une solution si
    FERMATE.DATA, FERMATE.VEICOLO, FERMATE.ORA_PARTENZA renvoie une clef unique sinon il va falloir passer par une procédure

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Oui oui!
    FERMATE.DATA, FERMATE.VEICOLO, FERMATE.ORA_PARTENZA renvoie effectivement une clef unique.
    Merci beaucoup, c'est très gentil de m'aider

    Thomas

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    refais le test en supprimant did("raz") de ta requête

Discussions similaires

  1. [Oracle 10G] Deux compteurs dans une requete
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 4
    Dernier message: 24/04/2008, 08h59
  2. Ajout d'un champ dans une requete
    Par maysa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/04/2007, 11h35
  3. [Requête/SQL]ajouter un champ calculé dans une table
    Par zougna dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 17/04/2007, 19h09
  4. [PL/SQL]probleme affectation de variable dans une requete
    Par <% Bastien %> dans le forum SQL
    Réponses: 9
    Dernier message: 17/04/2007, 18h40
  5. [SQL INTERBASE] format de date dans une requete sql
    Par arnolpourri dans le forum InterBase
    Réponses: 5
    Dernier message: 03/07/2006, 11h42

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