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

Requêtes et SQL. Discussion :

Numéroter les lignes d'une requète avec 3 critères


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai Avatar de tuxdiver
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 39
    Points : 19
    Points
    19
    Par défaut Numéroter les lignes d'une requète avec 3 critères
    Bonjour,

    Je développe en grand amateur une base au boulot afin de faciliter la réalisation du suivi de formation de plongeurs subaquatiques.
    Chaque plongeur participe à des entraînements au cours de l'année qui sont référencer dans une table "Sortie" et réalise une ou plusieurs plongées par "sortie" référencées dans une table "Temps"
    Mon but est de numéroter chaque plongée pour chaque agent ( plongeur 1, plongées 1,2,3,4,5...; plongeur 2, plongées 1,2,3,4,5,...) qui ressortiront dans un état bilan de fin d'année et qui s'ajouteront aux plongées réalisées avant la création de la base.
    j'ai donc
    une table t_sortie avec id_sortie, Jour, lieu ...
    une table t_temps avec id_temps, nom, heure_début, heure_fin, prof ...
    J'ai pu créer la requête "req_plg_compte" qui trie par "nom" puis par "jour" de "sortie" puis par "heure_début" d'immersion
    Pour numéroter j'ai créé une deuxième requête à partir des infos glanées sur le forum mais en vain !!
    la version la plus aboutie est celle ci :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (SELECT Count(id_temps) FROM (SELECT Distinct id_sortie FROM req_plg_compte) T2 WHERE T2.id_sortie<T1.id_sortie)+1 AS Rang, T1.id_sortie, *
    FROM req_plg_compte AS T1
    ORDER BY T1.Jour, T1.[Heure Début];

    mais les valeurs ne sont pas du tout au rdv !!
    cela ne fonctionne pas parce qu'il n'y a pas de valeur unique pour id_sortie étant donnée que plusieurs plongées peuvent avoir lieu le même jour d'ou la prise en compte de l'heure de début
    et les id temps ou sortie ne sont pas réguliers puisque certains enregistrements ont été supprimer et des plongées oubliées ont été rajoutées en fin d'année, du coup il y a des vides dans la numérotation
    enfin cette formule marchait lorsque je filtrais un agent mais ne convient pas lorsque la liste est complete
    la première requête de tri est nickel, trie par nom puis par date puis par heure de début ; il me faudrait juste un numéro en tete de ligne de 1 à n par agent

    merci d'avance pour vos pistes et réponses

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour.

    La numérotation d'enregistrement dans Access est toujours un souci pacque cela n'existe pour les objets mathématiques que sont les tables c-à-d des ensembles donc il faut ruser pour y arriver.

    Tu étais sur la bonne piste, il faut compter ce qui précède l'enregistrement courant.

    Personnellement j'utilise DCount() car je trouve cela plus simple que les requêtes imbriquées.

    Dans ton cas je ferais :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Rang:Dcount("id_temps"; "t_Temps"; [critere])

    avec

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Critere: "[Nom]=""" & [t_Temps].[Nom] & """ and [t_Sortie].[Jour]<=#" & format([T_Sortie].[Jour]; "aaaa\-mm\-jj") & "# and [t_Temps].[heure_début]<=#" & format([T_Temps].[heure_début]; "hh:nn:ss") & "#"
    Donc : compte toutes les Id_Temps du plongeur dont la date et l'heure sont inférieurs ou égaux à l'enregistrement courant dans T_Temps.

    J'utilises un champ calculé [Critere] séparé pour pouvoir voir ce que Access utilise pour retrouver les données. Je trouve que cela facilite la mise au point.
    En triant sur [critere] tu devrais voir les informations dans le bon ordre pour trouver le rang et pouvoir valider le calcul.

    A+

  3. #3
    Membre à l'essai Avatar de tuxdiver
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Bonsoir,

    merci beaucoup pour la célérité de ta réponse !
    Mes lacunes en bon débutant me laissent bloquées au "copier" de tes formules que je ne sais pas ou coller !!

    tu me dis que c'est un champ calculé du coup je regarde pour l’insérer dans la table t_temps mais il attend du vba pas du sql
    je me dis donc que c'est un module à créer voire deux et là je suis totalement perdu

    merci de m'éclairer

    encore merci pour ta réponse

  4. #4
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Avril 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut
    Marot
    tuxdiver

    Mes lacunes en bon débutant me laissent bloquées au "copier" de tes formules que je ne sais pas ou coller !!
    Il te suffit de coller cette formule dans le champ d'une requête. Par Exemple tu peux ouvrir ta requête req_plg_compte en mode création et cliquer sur un champ vide puis tu fais coller.

    tu me dis que c'est un champ calculé du coup je regarde pour l’insérer dans la table t_temps mais il attend du vba pas du sql
    Pas besoin de l'inseré dans une table, car cela n'a pas d'importance. Insere simplement Le dernier sql de Marot dans le champ d'une requête et tu constateras le résultat.

  5. #5
    Membre à l'essai Avatar de tuxdiver
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    bonjour, et merci de participer à ma laborieuse expérience des fonctions de domaine !! oui j'ai creusé et j'ai trouvé ça mais ça n'a pas suffit !!

    j'ai adapté les lignes proposées avec leurs noms réels et j'ai fusionné les deux parce que le lien ne s'est pas fait dans deux requêtes entre les "critere"
    la copie a automatiquement remplacé le dcount par CpteDom, ce qui me laisse penser que j'ai peut être des coquilles de codes entre sql et vba...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Rang:Dcount("id_temps"; "t_Temps"; [critere])
     
    Critere: "[Nom]=""" & [t_Temps].[Nom] & """ and [t_Sortie].[Jour]<=#" & format([T_Sortie].[Jour]; "aaaa\-mm\-jj") & "# and [t_Temps].[heure_début]<=#" & format([T_Temps].[heure_début]; "hh:nn:ss") & "#"
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rang: CpteDom("id_temps";"t_plg_temps";("[Agent]=""" & [t_plg_temps].[Agent] & """ and [t_plg_sortie].[Jour]<=#" & Format([t_plg_sortie].[Jour];"aaaa-mm-jj") & "# and [t_plg_temps].[Heure Début]<=#" & Format([t_plg_temps].[Heure Début];"hh:nn:ss") & "#"))
    et je n'obtiens que des "erreurs" sans aucune propositions, parenthèses ok, syntaxe ok ... aucune pistes !!

    merci pour votre aide

  6. #6
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Avril 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut
    Ok je vais créer une BdD avec ton sql et vois ce qui ne va pas

    Je te fais signe dans un instant.........

  7. #7
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Avril 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut
    Si cela ne te derange pas peut tu poster ici même ta base de données avec quelques enregistrements(non sensibles). Cela m'eviterais d'encoder des enregistrements(vu que je ne sais pas comment tu encode des données)

  8. #8
    Membre à l'essai Avatar de tuxdiver
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    re bonjour,

    ci-joint un extrait de ma base

    Compteur_plg.rar


    "J'adore chercher, mais, c'est encore meilleur de trouver, parce que l'on sait qu'on va pouvoir chercher autre chose !!

  9. #9
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Avril 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut
    je t'envoie toute de suite la base de donnée avec le résultat attendu

  10. #10
    Membre à l'essai Avatar de tuxdiver
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    merci,

    je viens de tester ta base. le décompte se fait mais le tri ne se fait pas par ordre chronologique. j'ai tenté de changer l'ordre des éléments dans "rang" mais ça ne change rien

    de plus l'idée de départ était d'avoir un décompte indépendant par agent et non d'avoir l'ordre général. j'obtiens la numérotation individuel mais cela implique de mettre le nom en critère dans la requête initialisation; je ne me voit pas faire une requête par agent !!

    je remet la base modifiée et allegée !!

    Compteur_plg.rar

    encore merci

  11. #11
    Membre à l'essai Avatar de tuxdiver
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    help !!

    je suis bloqué depuis ce midi, je l'ai torturé dans tous les sens !! quand ça ne veut pas ça ne veut pas !!

    entre SELECT COUNT et DCOUNT je ne sais plus que choisir !!

  12. #12
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Avril 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    Desoler pour le retard

    Je comprend mieux ce que tu veux obtenir

  13. #13
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Avril 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut
    Examine cette image
    Nom : compl.PNG
Affichages : 1082
Taille : 27,5 Ko

    Voici la BdD
    Compteur_plg.rar

    C'est une début de solution(sinon la solution)

  14. #14
    Membre à l'essai Avatar de tuxdiver
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    yessss

    belle avancée, en toute simplicité, génial... merci !!
    je dois rendre les bilans annuels pour hier donc ça devrait le faire,

    mais ...

    j'ai rajouté au décompte le nombre de plongées atteint avant la création de la base par agent, j'obtiens ainsi pour 150 plongées au compteur, 151 152 ...
    mais l'an prochain, le décompte va repartir à zéro !!

    est il possible d'inscrire le numéro de plonge dans un champs de la table temps pour le figer ?

    faut il développer malgré tout un DCOUNT dans une requête qui s'incrémente quelque soit l'année ?

    Compteur_plg.rar

  15. #15
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Avril 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    J'ai du mal a comprendre tes questions(parce que j'ai pas un bon niveau en français)

    Alors réexplique d'abord la première question. Et on verra par la suite

  16. #16
    Membre à l'essai Avatar de tuxdiver
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    hello,
    touché !!

    Un plongeur fait entre 20 et 40 plongées par an qui se cumulent tout au long de sa carrière et sont consignées dans un carnet avec un numéro qui s'incrémente à chaque plongée.

    Le but est de reproduire ce carnet dans la BdD.

    A chaque entrainement la plongée prend un numéro.

    Le premier numéro de la base s'ajoute au total de plongées de chaque agent avant la création de la BdD que j'ai appelé compteur dans la table t_agent

    Le soucis du résultat dans l'état c'est que la numérotation repart à zéro en fonction du groupe soit ici chaque année

    Est-il possible de trouver une solution, comme on l'avait envisagé au début, au niveau d'une requête afin d'incrémenter la table t_temps ou une table compteur dédiée ?
    le numéro serait ainsi inscrit et figé au niveau de la table

    j'espère être assez clair
    regarde la copie de BdD du message précèdent il y a un exemple de compteur

    merci encore

  17. #17
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Avril 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut
    Bonjour Tuxdiver

    J'avais un problème de Santé pendant tout ce temps

    Si j'ai bien compris le principe de fonctionnement de ton Champs "Compteur"
    tu souhaiterais avoir dans ce champs un décompte qui ne part pas de 0. Et qui débute à partir de 141 c'est à dire 141, 142, 143, 144, 145.......etc Comme tu l'avais commencé dans l'Etat1

  18. #18
    Membre à l'essai Avatar de tuxdiver
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    bonjour,

    oui et non

    le but n'est pas de partir de 140 ou autre, le but est de partir du compteur au 1 janvier 2015 de chaque plongeur, information contenue dans le champs compteur de la table t_agent, et qu'il continue à s'incrémenter ad vitam
    que je n'ai pas besoin de re-rentrer la valeur tous les ans

    et surtout que le chiffre s'inscrive dans la table t_temps en fonction du nom pour que chaque plongée soit numérotée pour un plongeur

    ce que l'on a fait dans l'etat fonctionne pour cette année mais repartira à zéro au 1er janvier

    je ne parviens pas à décortiquer la formule de dcount donnée par marot_r qui devait etre adaptée à ma recherche

    merci pour le temps passé

Discussions similaires

  1. [AC-2010] Numéroter les lignes d'une requête
    Par AudREN dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 20/10/2014, 19h50
  2. [BO XI R2] Compter les lignes d'une requête
    Par iori11 dans le forum Webi
    Réponses: 6
    Dernier message: 24/06/2008, 12h10
  3. Réponses: 6
    Dernier message: 24/06/2007, 01h13
  4. [MySQL] Comment lister de manière numérotée les lignes d'une table
    Par méphistopheles dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/12/2006, 17h12
  5. Numérotation des lignes dans une requête
    Par zoom61 dans le forum Access
    Réponses: 5
    Dernier message: 24/10/2006, 10h35

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