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 :

Afficher la valeur d'un enum dans ma requête [Débutant(e)]


Sujet :

Langage SQL

  1. #1
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut Afficher la valeur d'un enum dans ma requête
    Bonsoir,

    Je travaille avec un base de données MySQL et j'ai un soucis pour afficher une valeur d'un enum type.

    J'ai une table `IMMEUBLE` à laquelle est rattachée une table `REVENU_LOCATIF`.

    Il peur y avoir un à n enregistrement correspondant dans cette table, mais dans tous les cas, j'affiche toujours les valeurs du dernier enregistrement, le tri étant effectué sur le champ `DATE_DEBUT`. La solution m'a été fournie sur le forum et cela fonctionne parfaitement.

    En terme de jointure, cela donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FROM IMMEUBLE AS imm
    ...
    ON revloc1.IMMEUBLE_ID_FK = imm.ID
    LEFT JOIN REVENU_LOCATIF AS revloc2
    ON revloc2.IMMEUBLE_ID_FK = imm.ID
        AND revloc2.DATE_DEBUT > revloc1.DATE_DEBUT
    ...
    WHERE revloc2.DATE_DEBUT IS NULL
    Si je veux afficher par la date de fin de mon dernier revenu locatif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    , revloc1.DATE_FIN AS FIN_DECOMPTE
    Pas de soucis !

    Par contre, dans cette table `REVENU_LOCATIF`, j'ai également un champ `ENUM_TYPE` et un champ `MONTANT` et je n'arrive pas à récupérer la valeur de ce dernier en spécifiant la valeur du champ `ENUM_TYPE`, par exemple 'fondRegulationExistant'

    J'ai essayé plusieurs syntaxe sans y parvenir.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    , (SELECT (revloc1.MONTANT) FROM REVENU_LOCATIF AS revloc1 WHERE revloc1.ENUM_TYPE = 'fondRegulationExistant'
    Mais j'ai une erreur de syntaxe.

    Est-ce que je dois passer par une sous-requête ou bien il y'a un moyen plus simple ?

    Je dois dire que je m'y perd un peu.

    Merci d'avance pour votre aide.
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je ne connais pas très bien mySQL, mais sauf à avoir une table des types énumérés sous la forme valeur,libellé et donc l'utilisation d'une jointure sur cette dernière, je ne crois pas que les SGBD proposent des solutions de ce type
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Pour ce qui concerne la recherche de la date la plus récente, il y avait plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT Col1, Col2,... Coln
    FROM IMMEUBLE     AS IMM
    INNER JOIN REVLOC AS REV
       ON REV.IMMEUBLE_ID_FK = IMM.ID
    WHERE IMM.ID = nnnnn
      AND NOT EXISTS
         (select 1 
          from REVLOC AS REV2
          where REV2.IMMEUBLE_ID_FK=IMM.ID
            and REV2.DATE_DEBUT > REV.DATE_DEBUT)
    Concernant votre question, je ne vois pas quelle est la difficulté, pouvez vous poster un exemple de données en entrée et de résultat attendu

  4. #4
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Bonjour,

    Le code ci-dessus fonctionne lorsqu'on sélectionne un immeuble particulier.

    Par contre, j'ai plusieurs centaines d'immeubles et des milliers de revenus locatifs (1 à n par immeuble).

    Et pour chaque immeuble, je ne désire afficher que les valeurs les plus récentes.

    J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT CONCAT(imm.NUMERO_DOSSIER, '-', imm.LETTRE_DOSSIER) AS NO_DOSSIER
        , rev.DATE_FIN
    FROM IMMEUBLE AS imm
    INNER JOIN REVENU_LOCATIF AS rev
    ON rev.IMMEUBLE_ID_FK = imm.ID
    WHERE NOT EXISTS
         (SELECT SELECT rev2.IMMEUBLE_ID_FK
          FROM REVENU_LOCATIF AS rev2
          WHERE rev2.DATE_DEBUT > rev.DATE_DEBUT)
    Mais dans ce cas, je n'obtiens que quelques lignes comme résultat, soit les revenus locatifs dont la date de fin est la plus élevée (30.06.2018), alors que je désire obtenir ceci :

    imm AAAA - 31.12.2016
    imm BBBB - 30.06.2016
    imm CCCC - 31.12.2012
    imm DDDD - 31.12.2016
    imm EEEE - 30.06.2018

    Merci de votre aide.
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    C'est parcequ'il manque un critère de jointure dans votre requête imbriquée (en rouge ci-dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT CONCAT(imm.NUMERO_DOSSIER, '-', imm.LETTRE_DOSSIER) AS NO_DOSSIER
        , rev.DATE_FIN
    FROM IMMEUBLE AS imm
    INNER JOIN REVENU_LOCATIF AS rev
       ON rev.IMMEUBLE_ID_FK = imm.ID
    WHERE NOT EXISTS
         (SELECT 1
          FROM REVENU_LOCATIF AS rev2
          WHERE rev2.IMMEUBLE_ID_FK = imm.ID
            AND rev2.DATE_DEBUT > rev.DATE_DEBUT)
    Note : j'ai aussi supprimé le double select de votre requete imbriquée

  6. #6
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Ok, cela fonction très bien, et point de vue performance, cela semble beaucoup plus rapide.

    Maintenant, dans la table `REVENU_LOCATIF`, j'ai une colonne `ENUM_TYPE` avec huit valeurs distinctes et une colonne `MONTANT` contenant les valeurs respectives de la précédente.

    Je dois utiliser plusieurs de ces valeurs dans ma requête (et même faire des calculs).

    J'ai essayé ceci pour extraire uniquement le montant de la valeur `ENUM_TYPE` = 'fondRegulationExistant', mais la sous-requête renvoie plus d'une ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT CONCAT(imm.NUMERO_DOSSIER, '-', imm.LETTRE_DOSSIER) AS NO_DOSSIER
        /*, rev.DATE_FIN*/
        , (SELECT(revloc.MONTANT) FROM REVENU_LOCATIF AS revloc WHERE revloc.IMMEUBLE_ID_FK = imm.ID AND revloc.ENUM_TYPE = 'fondRegulationExistant')
    FROM IMMEUBLE AS imm
    INNER JOIN REVENU_LOCATIF AS rev
       ON rev.IMMEUBLE_ID_FK = imm.ID
    WHERE NOT EXISTS
         (SELECT 1
          FROM REVENU_LOCATIF AS rev2
          WHERE rev2.IMMEUBLE_ID_FK = imm.ID
              AND rev2.DATE_DEBUT > rev.DATE_DEBUT);
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Domi2 Voir le message
    Ok, cela fonction très bien, et point de vue performance, cela semble beaucoup plus rapide.
    Oui le "where (not) exists" est la bonne méthode pour vérifier l'existence (l'absence) d'une valeur

    Citation Envoyé par Domi2 Voir le message
    Maintenant, dans la table `REVENU_LOCATIF`, j'ai une colonne `ENUM_TYPE` avec huit valeurs distinctes et une colonne `MONTANT` contenant les valeurs respectives de la précédente.
    Je dois utiliser plusieurs de ces valeurs dans ma requête (et même faire des calculs).
    Y a -t- il bien une seule ligne pour un tuple imm.NUMERO_DOSSIER, rev.DATE_FIN, rev.rev.DATE_FIN ?

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Ceci correspond il au besoin ? :
    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
    SELECT CONCAT(imm.NUMERO_DOSSIER, '-', imm.LETTRE_DOSSIER) AS NO_DOSSIER
          ,ENUM_TYPE
          ,case when ENUM_TYPE = 'fondRegulationExistant'
                then (revloc.MONTANT * x )+ y 
                when ENUM_TYPE = 'tagadatsointsoin'
                then p-(revloc.montant / n)
                etc...
           end as MA_VALEUR
    FROM IMMEUBLE AS imm
    INNER JOIN REVENU_LOCATIF AS rev
       ON rev.IMMEUBLE_ID_FK = imm.ID
    WHERE NOT EXISTS
         (SELECT 1
          FROM REVENU_LOCATIF AS rev2
          WHERE rev2.IMMEUBLE_ID_FK = imm.ID
            AND rev2.DATE_DEBUT > rev.DATE_DEBUT)

  9. #9
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Y a -t- il bien une seule ligne pour un tuple imm.NUMERO_DOSSIER, rev.DATE_FIN, rev.rev.DATE_FIN ?
    Non, effectivement, j'ai été trop vite.

    Avec le code du post 6, j'ai autant de ligne que de valeurs distinctes du champ `ENUM_TYPE`.

    Et je ne pense pas que CASE WHEN réponde au besoin.

    En fait, il faudrait quelque chose comme 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
    SELECT CONCAT(imm.NUMERO_DOSSIER, '-', imm.LETTRE_DOSSIER) AS NO_DOSSIER
       , rev.DATE_FIN
       /*pseudo-code*/
       , rev.MONTANT WHERE revENUM.TYPE = 'fondRegulationExistant' + rev.MONTANT WHERE revENUM.TYPE = 'attribution'  - rev.MONTANT WHERE revENUM.TYPE = 'prelevement' AS MA_VALEUR
    FROM IMMEUBLE AS imm
    INNER JOIN REVENU_LOCATIF AS rev
       ON rev.IMMEUBLE_ID_FK = imm.ID
    WHERE NOT EXISTS
         (SELECT 1
          FROM REVENU_LOCATIF AS rev2
          WHERE rev2.IMMEUBLE_ID_FK = imm.ID
              AND rev2.DATE_DEBUT > rev.DATE_DEBUT)
        /*Pour isoler un enum, ceci fonctionne, mais j'ai plusieurs enum à traiter*/
              AND rev.ENUM_TYPE = 'fondRegulationExistant';
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Et le but était d'avoir les 6 montants calculés sur une même ligne ?
    C'est possible mais c'est du boulot

  11. #11
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Alors non, tous les montants ne doivent pas être calculés.

    Sur les huit types d'enum, je devrais avoir 3 colonnes (mais c'est encore à vérifier).

    Deux types dans deux colonnes distinctes et une colonne avec trois types qui font l'objet d'un calcul (voir post précédent).
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Voici une possibilité, c'est un peu fastidieux mais ca semble coller au besoin :

    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
    Select TT.ND as NO_DOSSIER
          ,Max(TT.M1)
          ,Max(TT.M2)
          ,Max(TT.M3)
    FROM (
    SELECT CONCAT(imm.NUMERO_DOSSIER, '-', imm.LETTRE_DOSSIER) AS ND
          ,MONTANT as M1   <== à remplacer par une formule si besoin
          ,0       as M2
          ,0       as M3
    FROM IMMEUBLE AS imm
    INNER JOIN REVENU_LOCATIF AS rev
       ON rev.IMMEUBLE_ID_FK = imm.ID
    WHERE rev.ENUM_TYPE = 'fondRegulationExistant'
      AND NOT EXISTS
         (SELECT 1
          FROM REVENU_LOCATIF AS rev2
          WHERE rev2.IMMEUBLE_ID_FK = imm.ID
            AND rev2.DATE_DEBUT > rev.DATE_DEBUT)
     
    UNION ALL
     
    SELECT CONCAT(imm.NUMERO_DOSSIER, '-', imm.LETTRE_DOSSIER) AS ND
          ,0       as M1
          ,MONTANT as M2 <== à remplacer par une formule si besoin
          ,0       as M3
    FROM IMMEUBLE AS imm
    INNER JOIN REVENU_LOCATIF AS rev
       ON rev.IMMEUBLE_ID_FK = imm.ID
    WHERE rev.ENUM_TYPE = 'UnAutreType'
      AND NOT EXISTS
         (SELECT 1
          FROM REVENU_LOCATIF AS rev2
          WHERE rev2.IMMEUBLE_ID_FK = imm.ID
            AND rev2.DATE_DEBUT > rev.DATE_DEBUT)
     
    UNION ALL
     
    SELECT CONCAT(imm.NUMERO_DOSSIER, '-', imm.LETTRE_DOSSIER) AS ND
          ,0       as M1
          ,0       as M2
          ,MONTANT as M3 <== à remplacer par une formule si besoin
    FROM IMMEUBLE AS imm
    INNER JOIN REVENU_LOCATIF AS rev
       ON rev.IMMEUBLE_ID_FK = imm.ID
    WHERE rev.ENUM_TYPE = 'UnAutreType'
      AND NOT EXISTS
         (SELECT 1
          FROM REVENU_LOCATIF AS rev2
          WHERE rev2.IMMEUBLE_ID_FK = imm.ID
            AND rev2.DATE_DEBUT > rev.DATE_DEBUT)
    ) as TT
    Group by tt.ND
    J'ai fait sans CTE puisque MySQL ne les accepte pas

  13. #13
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Effectivement, mis à part une petite correction dans le GROUP BY (TT.ND), cela semble faire exactement le job !

    Super
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  14. #14
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Techniquement c'est possible, mais attention aux temps de réponse en fonction des volumes concernés et du nombre de fois où cette requete sera exécutée

  15. #15
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Ok, je vais regarder.

    Par contre, je ne vois pas comment faire un calcul

    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
    Select TT.ND as NO_DOSSIER
          ,Max(TT.M1)
          ,Max(TT.M2)
          ,Max(TT.M3)
    FROM (
    SELECT CONCAT(imm.NUMERO_DOSSIER, '-', imm.LETTRE_DOSSIER) AS ND
          ,MONTANT as M1   /*<== à remplacer par une formule si besoin*/
          ,0       as M2
          ,0       as M3
    FROM IMMEUBLE AS imm
    INNER JOIN REVENU_LOCATIF AS rev
       ON rev.IMMEUBLE_ID_FK = imm.ID
    WHERE rev.ENUM_TYPE = 'fondRegulationExistant'
      AND NOT EXISTS
         (SELECT 1
          FROM REVENU_LOCATIF AS rev2
          WHERE rev2.IMMEUBLE_ID_FK = imm.ID
            AND rev2.DATE_DEBUT > rev.DATE_DEBUT)
     
    UNION ALL
     
    SELECT CONCAT(imm.NUMERO_DOSSIER, '-', imm.LETTRE_DOSSIER) AS ND
          ,0       as M1
          ,MONTANT as M2 /*<== à remplacer par une formule si besoin*/
          ,0       as M3
    FROM IMMEUBLE AS imm
    INNER JOIN REVENU_LOCATIF AS rev
       ON rev.IMMEUBLE_ID_FK = imm.ID
    WHERE rev.ENUM_TYPE = 'attribution'
      AND NOT EXISTS
         (SELECT 1
          FROM REVENU_LOCATIF AS rev2
          WHERE rev2.IMMEUBLE_ID_FK = imm.ID
            AND rev2.DATE_DEBUT > rev.DATE_DEBUT)
     
    UNION ALL
     
    SELECT CONCAT(imm.NUMERO_DOSSIER, '-', imm.LETTRE_DOSSIER) AS ND
          ,0       as M1
          ,0       as M2
          ,MONTANT as M3 /*<== à remplacer par une formule si besoin*/
    FROM IMMEUBLE AS imm
    INNER JOIN REVENU_LOCATIF AS rev
       ON rev.IMMEUBLE_ID_FK = imm.ID
    WHERE rev.ENUM_TYPE = 'prelevement'
      AND NOT EXISTS
         (SELECT 1
          FROM REVENU_LOCATIF AS rev2
          WHERE rev2.IMMEUBLE_ID_FK = imm.ID
            AND rev2.DATE_DEBUT > rev.DATE_DEBUT)
    ) as TT
    Group by TT.ND
    Comment faire pour afficher le résultat des 3 types dans une autre colonne (M1 + M2-M3 de chacun des SELECT) ?
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  16. #16
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Si le résultat final suffit alors c'est très simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select TT.ND as NO_DOSSIER
          ,Max(TT.M1)
          ,Max(TT.M2)
          ,Max(TT.M3)
          ,Max(TT.M1)+Max(TT.M2)-Max(TT.M3)
    FROM (
    suite inchangée
    Sinon ca devient un peu l'usine à gaz

  17. #17
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Oui, effectivement, c'est ce que je venais de faire.

    Il me semble avoir compris le principe.

    Si je désire ajouter un nouveau type, je dois ajouter une requête avec UNION ALL et corriger les 3 précédentes avec MONTANT as M4, de sorte que toutes les sous-requêtes renvoie le même nombre de colonnes.

    Maintenant, j'ai essayé rapidement d'inclure l'ensemble dans une requête principale, mais j'ai une erreur 1241 : Error Code: 1241. Operand should contain 1 column(s)

    Je vais faire des recherches sur ce problème particulier.
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  18. #18
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Domi2 Voir le message
    Si je désire ajouter un nouveau type, je dois ajouter une requête avec UNION ALL et corriger les 3 précédentes avec MONTANT as M4, de sorte que toutes les sous-requêtes renvoie le même nombre de colonnes.
    Voilà

    Après il ne faut pas hésiter à déléguer à l'application certains calculs intermédiaires plutôt que de chercher à tout faire en une seule requête et rendre celle-ci incompréhensible et/ou trop gourmande en ressources.

  19. #19
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Après il ne faut pas hésiter à déléguer à l'application certains calculs intermédiaires plutôt que de chercher à tout faire en une seule requête et rendre celle-ci incompréhensible et/ou trop gourmande en ressources.
    Oh, elle ne fait qu'à peine plus de 200 lignes. Pour le reste, je n'ai pas trop le choix, modifier ne serait-ce que légèrement l'architecture de l'application est hors de prix.
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  20. #20
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Bonjour,

    Alors j'ai essayé d'intégrer la sous-requête dans ma requête principale (de la ligne 90 à 139).

    En tant que requête, elle fonctionne, mais j'ai une erreur : Error Code: 1248. Every derived table must have its own alias

    Je comprend bien que c'est un problème d'alias, mais je ne vois pas comment le résoudre.

    Une idée ?

    Merci d'avance.

    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
    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
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    /*liste améliorée dès le 16.02.2016*/
    SELECT CONCAT(imm.NUMERO_DOSSIER, '-', imm.LETTRE_DOSSIER) AS NO_DOSSIER
        , imm.DATE_DECISION_CANTON AS DECISION_CANTON
        , (SELECT GROUP_CONCAT(regfoncier.NUMERO_PARCELLE ORDER BY regfoncier.NUMERO_PARCELLE ASC SEPARATOR '-') FROM REGISTRE_FONCIER AS regfoncier WHERE regfoncier.IMMEUBLE_ID_FK = imm.ID AND regfoncier.TYPE_REGISTRE_ID_FK = 1) AS PARCELLE
        , (SELECT GROUP_CONCAT(regfoncier.NUMERO_PARCELLE ORDER BY regfoncier.NUMERO_PARCELLE ASC SEPARATOR '-') FROM REGISTRE_FONCIER AS regfoncier WHERE regfoncier.IMMEUBLE_ID_FK = imm.ID AND regfoncier.TYPE_REGISTRE_ID_FK = 2) AS DDP	
        , CASE 
              WHEN imm.TYPE_AIDE_ID_FK =  1  THEN 'Aide dégressive'
              WHEN imm.TYPE_AIDE_ID_FK =  2  THEN 'Aide linéaire'
              WHEN imm.TYPE_AIDE_ID_FK =  3  THEN 'Autres aides'   
    	  END AS TYPE_AIDE
    	, CASE IFNULL((SELECT caut.MONTANT_ACTIVE FROM CAUTION AS caut WHERE caut.IMMEUBLE_ID_FK = imm.ID  ORDER BY caut.DEBUT_PERIODE DESC LIMIT 1), 0)
    		  WHEN 0 then 'Non'
    		  ELSE 'Oui'
    	  END AS CAUTION
    	, imm.DATE_DEBUT AS LOCATION
    	, CASE
    	      WHEN aide1.DATE_ECHEANCE_AIDE_CANTONAL IS NOT NULL THEN aide1.DATE_ECHEANCE_AIDE_CANTONAL
    		  ELSE DATE_SUB(DATE_ADD(aide1.DEBUT_AIDE_CANTONAL, INTERVAL aide1.DUREE_AIDE_CANTONAL YEAR),INTERVAL 1 DAY)
          END AS FIN_AIDES
        , DATE_SUB(DATE_ADD(aide1.DATE_DEBUT_FEDERAL, INTERVAL aide1.DUREE_ASI YEAR),INTERVAL 1 DAY) AS ECHEANCE_ASI
        , DATE_SUB(DATE_ADD(aide1.DATE_DEBUT_FEDERAL, INTERVAL aide1.DUREE_ASII YEAR),INTERVAL 1 DAY) AS ECHEANCE_ASII
        , DATE_SUB(DATE_ADD(aide1.DATE_DEBUT_FEDERAL, INTERVAL aide1.DUREE_ASIII YEAR),INTERVAL 1 DAY) AS ECHEANCE_ASIII
        , DATE_SUB(DATE_ADD(aide1.DATE_DEBUT_FEDERAL, INTERVAL aide1.DUREE_ASIV YEAR),INTERVAL 1 DAY) AS ECHEANCE_ASIV
        , imm.DATE_CONVENTION_LIBERATION AS LIBERATION
        , imm.DATE_SORTIE AS SORTIE
        , dist.NOM_DISTRICT AS DISTRICT
        , comm.NOM_COMMUNE AS COMMUNE
        , imm.ADRESSE_PRINCIPALE AS ADRESSE
    	, CASE
    	      WHEN imm.DELEGATION_COMPETENTE = 0 THEN 'Non'
    		  ELSE 'Oui'
    	  END AS DELEGATION	
        , QUERY_PARTENAIRES.PROPRIETAIRE AS PROPRIETAIRE
        , QUERY_PARTENAIRES.TYPE_STATUT_JURIDIQUE AS STATUT_JURIDIQUE
        , QUERY_PARTENAIRES.GERANCE AS GERANCE
        , statut.TYPE AS TYPE_DECOMPTE
        , travaux.TYPE AS TYPE_TRAVAUX
        , COUNT(CASE log.NOMBRE_PIECE WHEN 1 THEN log.NOMBRE_PIECE END) AS 1_P
        , COALESCE(ROUND(SUM(CASE log.NOMBRE_PIECE WHEN 1 THEN log.SURFACE_NETTE END), 2), 0) AS SURFACE_1_P
        , COALESCE(SUM(CASE log.NOMBRE_PIECE WHEN 1 THEN coutlog1.COUT END), 0) AS COUT_1_P 
        , COUNT(CASE log.NOMBRE_PIECE WHEN 2 THEN log.NOMBRE_PIECE END) AS 2_P 
        , COALESCE(ROUND(SUM(CASE log.NOMBRE_PIECE WHEN 2 THEN log.SURFACE_NETTE END), 2), 0) AS SURFACE_2_P 
        , COALESCE(SUM(CASE log.NOMBRE_PIECE WHEN 2 THEN coutlog1.COUT END), 0) AS COUT_2_P 
        , COUNT(CASE log.NOMBRE_PIECE WHEN 3 THEN log.NOMBRE_PIECE END) AS 3_P 
        , COALESCE(ROUND(SUM(CASE log.NOMBRE_PIECE WHEN 3 THEN log.SURFACE_NETTE END), 2), 0) AS SURFACE_3_P 
        , COALESCE(SUM(CASE log.NOMBRE_PIECE WHEN 3 THEN coutlog1.COUT END), 0) AS COUT_3_P 
        , COUNT(CASE log.NOMBRE_PIECE WHEN 4 THEN log.NOMBRE_PIECE END) AS 4_P 
        , COALESCE(ROUND(SUM(CASE log.NOMBRE_PIECE WHEN 4 THEN log.SURFACE_NETTE END), 2), 0) AS SURFACE_4_P
        , COALESCE(SUM(CASE log.NOMBRE_PIECE WHEN 4 THEN coutlog1.COUT END), 0) AS COUT_4_P 
        , COUNT(CASE log.NOMBRE_PIECE WHEN 5 THEN log.NOMBRE_PIECE END) AS 5_P 
        , COALESCE(ROUND(SUM(CASE log.NOMBRE_PIECE WHEN 5 THEN log.SURFACE_NETTE END), 2), 0) AS SURFACE_5_P
        , COALESCE(SUM(CASE log.NOMBRE_PIECE WHEN 5 THEN coutlog1.COUT END), 0) AS COUT_5_P	
        , COUNT(CASE WHEN log.NOMBRE_PIECE BETWEEN 1 AND 5 THEN log.NOMBRE_PIECE END) AS NB_LOGEMENT 
        , ROUND(SUM(CASE WHEN log.NOMBRE_PIECE BETWEEN 1 AND 5 THEN log.SURFACE_NETTE END), 2) AS SURFACE_TOTALE 
        , SUM(CASE WHEN log.NOMBRE_PIECE BETWEEN 1 AND 5 THEN coutlog1.COUT END) AS COUT_TOTAL
        , autre1.CAPITAL AS TERRAIN_DDP
        , (SELECT COUNT(DISTINCT adresse.NUMERO_ECA) FROM ADRESSE_IMMEUBLE AS adresse WHERE adresse.IMMEUBLE_ID_FK = imm.ID ORDER BY adresse.IMMEUBLE_ID_FK) AS NB_BATIMENT
        , CURDATE() AS DATE_EXPORT
    FROM IMMEUBLE AS imm
    LEFT JOIN REGISTRE_FONCIER AS regfonc
    ON regfonc.IMMEUBLE_ID_FK = imm.ID
    INNER JOIN TYPE_REGISTRE_FONCIER AS typeregfonc
    ON typeregfonc.ID = regfonc.TYPE_REGISTRE_ID_FK
    INNER JOIN COMMUNE AS comm
    ON comm.ID = imm.COMMUNE_ID_FK
    INNER JOIN DISTRICT AS dist
    ON dist.ID = comm.DISTRICT_ID_FK
    INNER JOIN TYPE_STATUT_IMMEUBLE AS statut
    ON statut.ID = TYPE_STATUT_IMMEUBLE_ID_FK
    INNER JOIN TYPE_NATURE_TRAVAUX AS travaux
    ON travaux.ID = TYPE_NATURE_TRAVAUX_ID_FK
    INNER JOIN AIDE AS aide1
    ON aide1.IMMEUBLE_ID_FK = imm.ID
    LEFT JOIN AIDE AS aide2
    ON aide2.IMMEUBLE_ID_FK = imm.ID
        AND aide2.DATE_DEBUT > aide1.DATE_DEBUT
    INNER JOIN LOGEMENT AS log
    ON log.IMMEUBLE_ID_FK = imm.ID
    INNER JOIN COUT_LOGEMENT AS coutlog1
    ON coutlog1.LOGEMENT_ID_FK = log.ID
    LEFT JOIN COUT_LOGEMENT AS coutlog2
    ON coutlog2.LOGEMENT_ID_FK = log.ID
        AND coutlog2.DEBUT_PERIODE > coutlog1.DEBUT_PERIODE
    INNER JOIN AUTRE_DECOMPTE AS autre1
    ON autre1.IMMEUBLE_ID_FK = imm.ID
        AND autre1.TYPE_AUTRE_DECOMTE_ID_FK = 1
    LEFT JOIN AUTRE_DECOMPTE AS autre2
    ON autre2.IMMEUBLE_ID_FK = imm.ID
        AND autre2.DATE_DEBUT > autre1.DATE_DEBUT
    INNER JOIN 
    	(SELECT srrevloc.SR_ID AS ID_DOSSIER
        , MAX(FONDS_DEBUT_PERIODE)
        , MAX(ATTRIBUTION)
        , MAX(PRELEVEMENT)      
    FROM (
    SELECT immrl.ID AS SR_ID
        , MONTANT AS FONDS_DEBUT_PERIODE
        , 0       AS ATTRIBUTION
        , 0       AS PRELEVEMENT
    FROM IMMEUBLE AS immrl
    INNER JOIN REVENU_LOCATIF AS revloc
    ON revloc.IMMEUBLE_ID_FK = immrl.ID
    WHERE revloc.ENUM_TYPE = 'fondRegulationExistant'
        AND NOT EXISTS
        (SELECT 1
        FROM REVENU_LOCATIF AS revloc2
        WHERE revloc2.IMMEUBLE_ID_FK = immrl.ID
            AND revloc2.DATE_DEBUT > revloc.DATE_DEBUT)
    UNION ALL
    SELECT immrl.ID AS SR_ID
        , 0       AS FONDS_DEBUT_PERIODE
        , MONTANT AS ATTRIBUTION
        , 0       AS PRELEVEMENT
    FROM IMMEUBLE AS immrl
    INNER JOIN REVENU_LOCATIF AS revloc
    ON revloc.IMMEUBLE_ID_FK = immrl.ID
    WHERE revloc.ENUM_TYPE = 'attribution'
        AND NOT EXISTS
        (SELECT 1
        FROM REVENU_LOCATIF AS revloc2
        WHERE revloc2.IMMEUBLE_ID_FK = immrl.ID
            AND revloc2.DATE_DEBUT > revloc.DATE_DEBUT)
    UNION ALL
    SELECT immrl.ID AS SR_ID
        , 0       AS FONDS_DEBUT_PERIODE
        , 0       AS ATTRIBUTION
        , MONTANT AS PRELEVEMENT
    FROM IMMEUBLE AS immrl
    INNER JOIN REVENU_LOCATIF AS revloc
    ON revloc.IMMEUBLE_ID_FK = immrl.ID
    WHERE revloc.ENUM_TYPE = 'prelevement'
        AND NOT EXISTS
        (SELECT 1
        FROM REVENU_LOCATIF AS revloc2
        WHERE revloc2.IMMEUBLE_ID_FK = immrl.ID
            AND revloc2.DATE_DEBUT > revloc.DATE_DEBUT)
    ) AS srrevloc
    GROUP BY SR_ID)
    ON srrevolc.SR_ID = immrl.ID
    LEFT OUTER JOIN
        (SELECT q3.id,
            q3.numero_dossier,
            q3.lettre_dossier,
            q3.proprietaire,
            q3.gerance,
            q3.TYPE_STATUT_JURIDIQUE_ID_FK,
    		TYPE AS TYPE_STATUT_JURIDIQUE
    FROM
        (SELECT q1.id,
            q1.numero_dossier,
            q1.Lettre_dossier,
            q1.partenaire AS PROPRIETAIRE,
            q2.partenaire AS GERANCE,
            q1.TYPE_STATUT_JURIDIQUE_ID_FK
    FROM
        (SELECT im.id,
            im.NUMERO_DOSSIER,
            im.LETTRE_DOSSIER,
            pa.PARTENAIRE,
            pa.TYPE_STATUT_JURIDIQUE_ID_FK
    FROM IMMEUBLE im
    LEFT OUTER JOIN PARTENAIRE_IMMEUBLE pi ON im.id = pi.IMMEUBLE_ID_FK
    INNER JOIN PARTENAIRE pa ON pi.PARTENAIRE_ID_FK = pa.ID
    WHERE pa.TYPE_PARTENAIRE_ID_FK = 1) q1
    LEFT OUTER JOIN
        (SELECT im.id,
            im.NUMERO_DOSSIER,
            im.LETTRE_DOSSIER,
            pa.PARTENAIRE
    FROM IMMEUBLE im
    LEFT OUTER JOIN PARTENAIRE_IMMEUBLE pi ON im.id = pi.IMMEUBLE_ID_FK
    INNER JOIN PARTENAIRE pa ON pi.PARTENAIRE_ID_FK = pa.ID
    WHERE pa.TYPE_PARTENAIRE_ID_FK = 2) q2 ON q1.ID = q2.ID
    UNION SELECT q1.id,
        q1.numero_dossier,
        q1.Lettre_dossier,
        q2.partenaire AS PROPRIETAIRE,
        q1.partenaire AS GERANCE,
        q1.TYPE_STATUT_JURIDIQUE_ID_FK
    FROM
        (SELECT im.id,
            im.NUMERO_DOSSIER,
            im.LETTRE_DOSSIER,
            pa.PARTENAIRE,
            pa.TYPE_STATUT_JURIDIQUE_ID_FK
    FROM IMMEUBLE im
    LEFT OUTER JOIN PARTENAIRE_IMMEUBLE pi ON im.id = pi.IMMEUBLE_ID_FK
    INNER JOIN PARTENAIRE pa ON pi.PARTENAIRE_ID_FK = pa.ID
    WHERE pa.TYPE_PARTENAIRE_ID_FK = 2) q1
    LEFT OUTER JOIN
        (SELECT im.id,
            im.NUMERO_DOSSIER,
            im.LETTRE_DOSSIER,
            pa.PARTENAIRE
    FROM IMMEUBLE im
    LEFT OUTER JOIN PARTENAIRE_IMMEUBLE pi ON im.id = pi.IMMEUBLE_ID_FK
    INNER JOIN PARTENAIRE pa ON pi.PARTENAIRE_ID_FK = pa.ID
    WHERE pa.TYPE_PARTENAIRE_ID_FK = 1) q2 ON q1.ID = q2.ID
    WHERE q2.partenaire IS NULL) q3
    LEFT OUTER JOIN TYPE_STATUT_JURIDIQUE tsj ON tsj.id = q3.TYPE_STATUT_JURIDIQUE_ID_FK ) QUERY_PARTENAIRES ON QUERY_PARTENAIRES.ID = imm.id
    WHERE log.NOMBRE_PIECE BETWEEN 1 AND 5
        AND aide2.DATE_DEBUT IS NULL
        AND coutlog2.DEBUT_PERIODE IS NULL
        AND autre2.DATE_DEBUT IS NULL
    GROUP BY imm.NUMERO_DOSSIER 
        , imm.LETTRE_DOSSIER
    ORDER BY imm.NUMERO_DOSSIER ASC 
        , imm.LETTRE_DOSSIER ASC;
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/03/2009, 14h20
  2. Réponses: 2
    Dernier message: 01/12/2008, 12h00
  3. afficher les valeur d'une requete dans une combobox
    Par carlos587261 dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/06/2007, 08h45
  4. Réponses: 10
    Dernier message: 22/05/2007, 11h07
  5. Afficher les valeurs d'une structure dans une matrice
    Par yabbiyou dans le forum MATLAB
    Réponses: 1
    Dernier message: 22/02/2007, 12h26

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