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 :

Nombre maximum de iif [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre expérimenté
    Avatar de minot83
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2006
    Messages
    972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 972
    Points : 1 430
    Points
    1 430
    Par défaut Nombre maximum de iif
    Bonjour,

    je me pose la question suivante : dans une requête utilisant des conditions Vraifaux ou iif, quel est le nombre maximum de conditions imbriquées ? (Access 2003)

    J'ai cette requête qui, pour générer la colonne "pole", en imbrique 13.

    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
    SELECT
    T_Agents.ID_Agent, T_Agents.[Agent_NOM],
    IIf(T_Structures!FK_Type_Hierarchique=5,T_Structures!ID_Structure,Null) AS Cellule,
     
    IIf(T_Structures!FK_Type_Hierarchique=4,T_Structures!ID_Structure,
    IIf([Cellule] Is Not Null,
    IIf(T_Structures_1!FK_Type_Hierarchique=4,T_Structures_1!ID_Structure,Null),Null)) AS Service, 
     
    IIf(T_Structures!FK_Type_Hierarchique=3,T_Structures!ID_Structure,
    IIf([Service] Is Not Null And [Cellule] Is Not Null,
    IIf(T_Structures_2!FK_Type_Hierarchique=3,T_Structures_2!ID_Structure,Null),
    IIf([Service] Is Not Null And [Cellule] Is Null,
    IIf(T_Structures_1!FK_Type_Hierarchique=3,T_Structures_1!ID_Structure,Null),
    IIf([Service] Is Null And [Cellule] Is Not Null,
    IIf(T_Structures_1!FK_Type_Hierarchique=3,T_Structures_1!ID_Structure,Null))))) AS Direction,
     
    IIf(T_Structures!FK_Type_Hierarchique=2,T_Structures!ID_Structure,
    IIf([Direction] Is Not Null And [Service] Is Not Null And [Cellule] Is Not Null,
    IIf(T_Structures_3!FK_Type_Hierarchique=2,T_Structures_3!ID_Structure,Null),
    IIf([Direction] Is Not Null And [Service] Is Not Null And [Cellule] Is Null,
    IIf(T_Structures_2!FK_Type_Hierarchique=2,T_Structures_2!ID_Structure,Null),
    IIf([Direction] Is Not Null And [Service] Is Null And [Cellule] Is Null,
    IIf(T_Structures_1!FK_Type_Hierarchique=2,T_Structures_1!ID_Structure,Null),
    IIf([Direction] Is Not Null And [Service] Is Null And [Cellule] Is Not Null,
    IIf(T_Structures_2!FK_Type_Hierarchique=2,T_Structures_2!ID_Structure,Null),
    IIf([Direction] Is Null And [Service] Is Not Null And [Cellule] Is Not Null,
    IIf(T_Structures_2!FK_Type_Hierarchique=2,T_Structures_2!ID_Structure,Null),
    IIf([Direction] Is Null And [Service] Is Not Null And [Cellule] Is Null,
    IIf(T_Structures_1!FK_Type_Hierarchique=2,T_Structures_1!ID_Structure,Null))))) AS Pole,
     
    FROM
       T_Structures AS T_Structures_3 
    RIGHT JOIN
       ((T_Agents 
    LEFT JOIN
       (T_Structures AS T_Structures_2 
    RIGHT JOIN
       (((T_Structures 
    RIGHT JOIN
       TR_Agent_Structure 
          ON T_Structures.ID_Structure = TR_Agent_Structure.FK_Structure) 
    LEFT JOIN
       (T_Structures AS T_Structures_1 
    RIGHT JOIN
       TR_Structures 
          ON T_Structures_1.ID_Structure = TR_Structures.FK_Structure_pere) 
             ON T_Structures.ID_Structure = TR_Structures.FK_Structure_fille) 
       LEFT JOIN
          TR_Structures AS TR_Structures_1 
             ON T_Structures_1.ID_Structure = TR_Structures_1.FK_Structure_fille) 
                ON T_Structures_2.ID_Structure = TR_Structures_1.FK_Structure_pere) 
                   ON T_Agents.ID_Agent = TR_Agent_Structure.FK_Agent) 
             LEFT JOIN
                TR_Structures AS TR_Structures_2 
                   ON T_Structures_2.ID_Structure = TR_Structures_2.FK_Structure_fille) 
                      ON T_Structures_3.ID_Structure = TR_Structures_2.FK_Structure_pere 
                ORDER BY
                   T_Agents.[Agent_NOM];
    J'ajoute mon modèle Nom : Structure_organigramme_7.jpg
Affichages : 249
Taille : 68,9 Ko

    Et un peu d'explications sur l'objectif recherché.
    Je souhaite mettre "à plat" par une requête les affectations de ma collectivité.
    Donc mon traitement s'intéresse, pour chaque agent rencontré à savoir s'il fait parti d'une cellule ou unité, d'un service, d'une direction ou d'un pôle. (4 niveaux retenus)
    Pour la colonne cellule, c'est simple : si la structure liée à l'agent est de niveau 5, alors affiche l'ID de cette cellule, sinon null.
    Pour la colonne service : si la structure liée à l'agent est de niveau 4, alors affiche l'ID de cette cellule, sinon null, sinon, si la colonne cellule est non null, alors regarde dans le niveau supérieur si la structure est de niveau 4, sinon null.
    Ainsi de suite pour le reste en testant chaque cas.

    D'avance merci pour vos éclairages
    si le message est pertinent : un petit si votre problème est résolu, n'oubliez pas le Tag Merci

  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 594
    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 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Salut,

    ca me parait bien illisible effectivement avec la succession de IIF...
    Aussi pourquoi ne passes tu pas par une fonction perso qui prend tous les champs nécessaires en paramètres et restitue la bonne valeur ? Tu simplifieras ton code SQL en conséquence avec un nettement plus sobre

    Code SQL : 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
    SELECT
    T_Agents.ID_Agent, T_Agents.[Agent_NOM],
    IIf(T_Structures!FK_Type_Hierarchique=5,T_Structures!ID_Structure,Null) AS Cellule,
     
    MaFonctionDirection(...) AS Direction,
     
    MaFonctionPole(...) AS Pole,
     
    FROM
       T_Structures AS T_Structures_3 
    RIGHT JOIN
       ((T_Agents 
    LEFT JOIN
       (T_Structures AS T_Structures_2 
    RIGHT JOIN
       (((T_Structures 
    RIGHT JOIN
       TR_Agent_Structure 
          ON T_Structures.ID_Structure = TR_Agent_Structure.FK_Structure) 
    LEFT JOIN
       (T_Structures AS T_Structures_1 
    RIGHT JOIN
       TR_Structures 
          ON T_Structures_1.ID_Structure = TR_Structures.FK_Structure_pere) 
             ON T_Structures.ID_Structure = TR_Structures.FK_Structure_fille) 
       LEFT JOIN
          TR_Structures AS TR_Structures_1 
             ON T_Structures_1.ID_Structure = TR_Structures_1.FK_Structure_fille) 
                ON T_Structures_2.ID_Structure = TR_Structures_1.FK_Structure_pere) 
                   ON T_Agents.ID_Agent = TR_Agent_Structure.FK_Agent) 
             LEFT JOIN
                TR_Structures AS TR_Structures_2 
                   ON T_Structures_2.ID_Structure = TR_Structures_2.FK_Structure_fille) 
                      ON T_Structures_3.ID_Structure = TR_Structures_2.FK_Structure_pere 
                ORDER BY
                   T_Agents.[Agent_NOM];
    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 expérimenté
    Avatar de minot83
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2006
    Messages
    972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 972
    Points : 1 430
    Points
    1 430
    Par défaut
    Je te remercie,

    j'ai finalement réussi en décomposant la dernière étape, et ça donne ceci :

    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
    SELECT
       T_Agents.ID_Agent,
       T_Agents.NOM_Prenom,
       IIf(T_Structures!FK_Type_Hierarchique=5,
       T_Structures!ID_Structure,
       Null) AS Cellule,
       IIf(T_Structures!FK_Type_Hierarchique=4,
       T_Structures!ID_Structure,
       IIf([Cellule] Is Not Null,
       IIf(T_Structures_1!FK_Type_Hierarchique=4,
       T_Structures_1!ID_Structure,
       Null),
       Null)) AS Service,
       IIf(T_Structures!FK_Type_Hierarchique=3,
       T_Structures!ID_Structure,
       IIf([Service] Is Not Null 
       And [Cellule] Is Not Null,
       IIf(T_Structures_2!FK_Type_Hierarchique=3,
       T_Structures_2!ID_Structure,
       Null),
       IIf([Service] Is Not Null 
       And [Cellule] Is Null,
       IIf(T_Structures_1!FK_Type_Hierarchique=3,
       T_Structures_1!ID_Structure,
       Null),
       IIf([Service] Is Null 
       And [Cellule] Is Not Null,
       IIf(T_Structures_1!FK_Type_Hierarchique=3,
       T_Structures_1!ID_Structure,
       Null))))) AS Direction,
       IIf([Pole_Cellule_Service_Direction] Is Not Null,
       [Pole_Cellule_Service_Direction],
       IIf([Pole_Cellule_Service] Is Not Null,
       [Pole_Cellule_Service],
       IIf([Pole_Cellule_Direction] Is Not Null,
       [Pole_Cellule_Direction],
       IIf([Pole_Service_Direction] Is Not Null,
       [Pole_Service_Direction],
       IIf([Pole_Cellule] Is Not Null,
       [Pole_Cellule],
       IIf([Pole_Service] Is Not Null,
       [Pole_Service],
       IIf([Pole_Direction] Is Not Null,
       [Pole_Direction],
       IIf([Pole_Seul] Is Not Null,
       [Pole_Seul],
       Null)))))))) AS Pole,
       IIf([Direction] Is Not Null 
       And [Service] Is Not Null 
       And [Cellule] Is Not Null,
       IIf(T_Structures_3!FK_Type_Hierarchique=2,
       T_Structures_3!ID_Structure,
       Null)) AS Pole_Cellule_Service_Direction,
       IIf([Direction] Is Null 
       And [Service] Is Not Null 
       And [Cellule] Is Not Null,
       IIf(T_Structures_2!FK_Type_Hierarchique=2,
       T_Structures_2!ID_Structure,
       Null)) AS Pole_Cellule_Service,
       IIf([Direction] Is Not Null 
       And [Service] Is Null 
       And [Cellule] Is Not Null,
       IIf(T_Structures_2!FK_Type_Hierarchique=2,
       T_Structures_2!ID_Structure,
       Null)) AS Pole_Cellule_Direction,
       IIf([Direction] Is Not Null 
       And [Service] Is Not Null 
       And [Cellule] Is Null,
       IIf(T_Structures_2!FK_Type_Hierarchique=2,
       T_Structures_2!ID_Structure,
       Null)) AS Pole_Service_Direction,
       IIf([Direction] Is Null 
       And [Service] Is Null 
       And [Cellule] Is Not Null,
       IIf(T_Structures_1!FK_Type_Hierarchique=2,
       T_Structures_1!ID_Structure,
       Null)) AS Pole_Cellule,
       IIf([Direction] Is Null 
       And [Service] Is Not Null 
       And [Cellule] Is Null,
       IIf(T_Structures_1!FK_Type_Hierarchique=2,
       T_Structures_1!ID_Structure,
       Null)) AS Pole_Service,
       IIf([Direction] Is Not Null 
       And [Service] Is Null 
       And [Cellule] Is Null,
       IIf(T_Structures_1!FK_Type_Hierarchique=2,
       T_Structures_1!ID_Structure,
       Null)) AS Pole_Direction,
       IIf(T_Structures!FK_Type_Hierarchique=2,
       T_Structures!ID_Structure,
       Null) AS Pole_Seul,
       IIf([Date_fin_Agent_Structure] Is Not Null,
       [Date_fin_Agent_Structure],
       IIf([Date_Fin_Structure] Is Not Null,
       [Date_Fin_Structure],
       IIf([Date_Fin_lien] Is Not Null,
       [Date_Fin_lien],
       IIf([Date_Fin_Structure1] Is Not Null,
       [Date_Fin_Structure1],
       IIf([Date_Fin_lien1] Is Not Null,
       [Date_Fin_lien1],
       IIf([Date_Fin_Structure2] Is Not Null,
       [Date_Fin_Structure2],
       IIf([Date_Fin_lien2] Is Not Null,
       [Date_Fin_lien2],
       IIf([Date_Fin_Structure3] Is Not Null,
       [Date_Fin_Structure3],
       Null)))))))) AS DF,
       TR_Agent_Structure.Date_debut AS Date_debut_Agent_Structure,
       TR_Agent_Structure.Date_fin AS Date_fin_Agent_Structure,
       T_Structures.Date_Debut AS Date_Debut_Structure,
       T_Structures.Date_Fin AS Date_Fin_Structure,
       TR_Structures.Date_Debut AS Date_Debut_lien,
       TR_Structures.Date_Fin AS Date_Fin_lien,
       T_Structures_1.Date_Debut AS Date_Debut_Structure1,
       T_Structures_1.Date_Fin AS Date_Fin_Structure1,
       TR_Structures_1.Date_Debut AS Date_Debut_lien1,
       TR_Structures_1.Date_Fin AS Date_Fin_lien1,
       T_Structures_2.Date_Debut AS Date_Debut_Structure2,
       T_Structures_2.Date_Fin AS Date_Fin_Structure2,
       TR_Structures_2.Date_Debut AS Date_Debut_lien2,
       TR_Structures_2.Date_Fin AS Date_Fin_lien2,
       T_Structures_3.Date_Debut AS Date_Debut_Structure3,
       T_Structures_3.Date_Fin AS Date_Fin_Structure3  
    FROM
       T_Agents 
    LEFT JOIN
       (
          T_Structures AS T_Structures_3 
       RIGHT JOIN
          (
             (
                T_Structures AS T_Structures_2 
             RIGHT JOIN
                (
                   (
                      (
                         T_Structures 
                      RIGHT JOIN
                         TR_Agent_Structure 
                            ON T_Structures.ID_Structure = TR_Agent_Structure.FK_Structure
                         ) 
                   LEFT JOIN
                      (
                         T_Structures AS T_Structures_1 
                      RIGHT JOIN
                         TR_Structures 
                            ON T_Structures_1.ID_Structure = TR_Structures.FK_Structure_pere
                         ) 
                            ON T_Structures.ID_Structure = TR_Structures.FK_Structure_fille
                         ) 
                   LEFT JOIN
                      TR_Structures AS TR_Structures_1 
                         ON T_Structures_1.ID_Structure = TR_Structures_1.FK_Structure_fille
                      ) 
                         ON T_Structures_2.ID_Structure = TR_Structures_1.FK_Structure_pere
                      ) 
                LEFT JOIN
                   TR_Structures AS TR_Structures_2 
                      ON T_Structures_2.ID_Structure = TR_Structures_2.FK_Structure_fille
                   ) 
                      ON T_Structures_3.ID_Structure = TR_Structures_2.FK_Structure_pere
                   ) 
                      ON T_Agents.ID_Agent = TR_Agent_Structure.FK_Agent  
                ORDER BY
                   T_Agents.NOM_Prenom;
    Par contre, si tu peux me dire comment tu aurais écrit une étape (par exemple celle de la direction) dans une fonction, je veux bien
    si le message est pertinent : un petit si votre problème est résolu, n'oubliez pas le Tag Merci

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

Discussions similaires

  1. [EXCEL]Nombre maximum de feuilles
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 11/05/2012, 08h46
  2. Nombre maximum de connexions acceptées par postgresql
    Par kaikai dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 26/08/2008, 10h29
  3. nombre maximum dans une table access
    Par simof1977 dans le forum Access
    Réponses: 1
    Dernier message: 18/05/2006, 19h05
  4. Nombre maximum de fichiers ouverts par processus
    Par galinoo dans le forum Windows
    Réponses: 3
    Dernier message: 27/10/2004, 17h47
  5. Nombre maximum de textures
    Par venomelektro dans le forum OpenGL
    Réponses: 7
    Dernier message: 02/09/2004, 15h54

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