1. #1
    Membre à l'essai
    Inscrit en
    octobre 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : octobre 2002
    Messages : 21
    Points : 19
    Points
    19

    Par défaut Agrégation avec plusieurs critères

    Bonjour,

    Je cherche depuis pas mal de temps en SQL à regrouper des lignes en fonction de critères.

    Source :
    Ligne 1 : A
    Ligne 2 : B
    Ligne 3 : C
    Ligne 4 : D

    J'ai une règle qui dit A + B ==> E
    Je cherche via un group by, ou un XMLLAG ou autre à obtenir :

    Cible :
    Ligne 1 : E
    Ligne 2 : C
    Ligne 3 : D

    Est-ce possible ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 373
    Points : 22 277
    Points
    22 277

    Par défaut

    Citation Envoyé par laurentdusseau Voir le message
    J'ai une règle qui dit A + B ==> E
    Cette règle est-elle formalisée dans une table de la base de données ou uniquement dans l'esprit de l'utilisateur ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Inscrit en
    octobre 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : octobre 2002
    Messages : 21
    Points : 19
    Points
    19

    Par défaut

    Bonsoir,

    Les règles ne sont pas dans une table. Elles sont dans l'esprit de l'utilisateur et donc à implémenter dans le code SQL idéalement (sachant qu'elles sont limitées en nombre)

    Laurent

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 373
    Points : 22 277
    Points
    22 277

    Par défaut

    La solution avec la règle dans la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  CASE WHEN source IN ('A', 'B') THEN 'E'
                WHEN source IN ('X', 'Y') THEN 'Z'
                ELSE source
            END             AS source
        ,   SUM(valeur)     AS  valeur
    FROM    matable tbl
    GROUP BY CASE WHEN source IN ('A', 'B') THEN 'E'
                WHEN source IN ('X', 'Y') THEN 'Z'
                ELSE source 
            END
    ;
    Création de la table de paramétrage :
    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
    CREATE  TABLE   agreg
        (   source  CHAR(1)
        ,   compose CHAR(1)
        )
    ;
    INSERT  INTO    agreg
        (   source
        ,   compose
        )
    VALUES
        (   'A'
        ,   'E'
        )
    ;
    INSERT  INTO    agreg
        (   source
        ,   compose
        )
    VALUES
        (   'B'
        ,   'E'
        )
    ;
    INSERT  INTO    agreg
        (   source
        ,   compose
        )
    VALUES
        (   'X'
        ,   'Z'
        )
    ;
    INSERT  INTO    agreg
        (   source
        ,   compose
        )
    VALUES
        (   'Y'
        ,   'Z'
        )
    ;
    La solution avec table de paramétrage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  COALESCE(agr.compose, tbl.source)   AS  source
        ,   SUM(valeur)                         AS  valeur
    FROM    matable tbl
        LEFT JOIN
            agreg   agr
            ON  tbl.source  = agr.source
    GROUP BY COALESCE(agr.compose, tbl.source)
    ;
    La seconde solution me semble bien plus maintenable.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. Recherche avec plusieurs critères
    Par Eco dans le forum Excel
    Réponses: 12
    Dernier message: 20/07/2016, 18h07
  2. Réponses: 6
    Dernier message: 23/11/2011, 16h36
  3. Compte d'enregistrement avec plusieurs critères
    Par MAMANHOU dans le forum VBA Access
    Réponses: 9
    Dernier message: 25/07/2007, 09h14
  4. requête SQL avec plusieurs critères de sélection
    Par gailup dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/06/2007, 08h44
  5. VBA-E Comment réaliser une recherche avec plusieurs critères ?
    Par Larsen21 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 14/12/2006, 13h43

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