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 :

Requête casse tête [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 40
    Points
    40
    Par défaut Requête casse tête
    Bonjour à toutes et tous,

    Sur le coup, je sèche . Quel code SQL dois je insérer dans ma requête de mise à jour pour que, dans l'exemple qui suit, les enregistrements repris sous la Division 1, indiquent un "1" dans la colonne "Division", un "2" pour ceux qui sont en dessous de la ligne où il y a un enregistrement "Division" avec le n°2, ect...


    Nom : Access.PNG
Affichages : 131
Taille : 6,8 Ko


    Merci la communauté !

    Loïc

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 286
    Points
    34 286
    Par défaut
    Salut,

    peut-on le faire en VBA plutôt qu'en SQL, ou bien est-ce un exercice type ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    Bonsoir Jean-Philippe,

    C'est un cas dans une partie de ma base.
    C'est important pour un reporting.
    On eut donc contourner le problème, même en VBA .

    Loïc

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    Salut tous,

    J'aime bien le SQL casse-tête

    Citation Envoyé par Lolodic Voir le message
    Sur le coup, je sèche . Quel code SQL dois je insérer dans ma requête de mise à jour pour que, dans l'exemple qui suit, les enregistrements repris sous la Division 1, indiquent un "1" dans la colonne "Division", un "2" pour ceux qui sont en dessous de la ligne où il y a un enregistrement "Division" avec le n°2, ect...
    En SQL ou VBA, il faudra quand même un critère de tri pour déterminer l'enregistrement qui est "sous" l'autre. Tes enregistrements sont-ils triés par ordre alphabétique pour les libellés ? Sinon, as-tu un champ date ou autre chose pour classer tes enregistrements ?

  5. #5
    Membre du Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    Bonsoir F-Leb,

    Oui, j'ai un ordre qui se crée (attention, ce n'est pas une clef primaire):

    Nom : Access2.PNG
Affichages : 124
Taille : 8,3 Ko

    Loïc

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 286
    Points
    34 286
    Par défaut
    OK,

    mon approche algorithmique en VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    '...ton SQL Actuel dans un recordset RS
    Dim Valo as Integer
    Do until RS.EOF
    If RS("Colonne").Value= 0 Then
    RS.Edit
    RS("Colonne").VAlue= Valo 
    RS.Update
    Else
    Valo =RS("Colonne").VAlue
    End if
    RS.MoveNext
    Loop
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    version SQL, avec un n° d'ordre cela devrait déjà être moins casse-tête.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT T.Libellé_articles, T.Division,
    (SELECT max(U.Division)
            FROM laTable U
            WHERE U.ordre<=T.ordre) as NewDivision
    FROM laTable T
    ORDER BY T.ordre

    La nouvelle colonne calculée retourne-t-elle le bon résultat ?

  8. #8
    Membre du Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    Sorry, mais a marche pas .
    Mais peut-être me suis je mal fait comprendre.
    Toutes ces infos viennent de la même table, et voici ce que souhaiterai :

    Nom : ct.PNG
Affichages : 149
Taille : 16,3 Ko

    Mon PC est dèjà passé 4 fois par la fenêtre

    Merciiiiiiiiiiiiiiiiiiiiiiii

    Loïc

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 286
    Points
    34 286
    Par défaut
    Bonjour,

    as-tu essayé avec le code VBA ? Quel en est le résultat, en quoi ne te convient-il pas ?

    Merci
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  10. #10
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    C'est pourtant bien ce que j'obtiens me semble-t-il avec la colonne calculée NewDivision :
    Nom : req1lolodic.PNG
Affichages : 115
Taille : 8,8 Ko

    Non ?

  11. #11
    Membre du Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    Salut F-Leb,
    Salut Jean-Phiilippe,

    Merci d'être revenu vers moi .

    F-Leb:

    Je dois avouer ne pas bien comprendre ton code. Vu que je n'ai qu'un seule table, je ne comprends pas cette ligne-ci:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
            WHERE U.ordre<=T.ordre) as NewDivision

    Jean-Philippe:

    J'ai message d'erreur à ce niveau-ci:


    ==> Pour finir, j'ai trouvé une solution avec un jeu de requêtes successif (7 pour être précis... ). C'est moins propre, mais c'est plus dans mes compétences .

  12. #12
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    Citation Envoyé par Lolodic Voir le message
    Je dois avouer ne pas bien comprendre ton code. Vu que je n'ai qu'un seule table, je ne comprends pas cette ligne-ci:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE U.ordre<=T.ordre) as NewDivision
    Je n'ai qu'une seule table également (nommée laTable), mais elle apparait deux fois dans la requête avec les alias T et U déclarés dans la clause FROM(des noms de remplacement) :
    SELECT T.Libellé_articles, T.Division,
    (SELECT max(U.Division)
            FROM laTable U
            WHERE U.ordre<=T.ordre) as NewDivision
    FROM laTable T
    ORDER BY T.ordre
    
    Quand j'ai un doigt sur un enregistrement de la table avec l'alias T, je peux comme ça aller chercher avec mon autre doigt dans une version de la table avec l'alias U le plus grand numéro de division parmi les enregistrements d'ordre inférieur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête (casse tête)
    Par shadeoner dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/02/2008, 10h35
  2. Requête casse tête.. à vous de jouer.. :)
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 3
    Dernier message: 17/09/2007, 09h39
  3. requête casse-tête pour une seule table..
    Par MikeV dans le forum Requêtes
    Réponses: 9
    Dernier message: 23/08/2007, 21h02
  4. Requête (casse tête)
    Par shadeoner dans le forum SQL
    Réponses: 13
    Dernier message: 12/06/2007, 17h13
  5. Requête casse tête!
    Par sonorc dans le forum Langage SQL
    Réponses: 10
    Dernier message: 08/05/2007, 02h03

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