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

WinDev Discussion :

regroupement résultat plusieurs requêtes dans une seule table


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2012
    Messages : 157
    Points : 39
    Points
    39
    Par défaut regroupement résultat plusieurs requêtes dans une seule table
    Bonjour à tous

    je cherche à regrouper la résultat de plusieurs requettes dans un seul table pour obtenir ceci:


    j construit 10 requette 5 pour les filles et 5 pour les garçons mais je pense que c pas opérationnel je préfère une requette comme dans l'exemple de Mr Laurent 30s
    http://www.developpez.net/forums/d13...ses-procedure/

    voilà mes 5 requette pour compter selon genre garçon et se sont les mêmes pour les filles
    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
    LOCAL
    	sMaRequete est une chaîne
    	sdRQ1 est une Source de Données
     
    sMaRequete = [
    SELECT 
    notes.CLas AS CLas,  
    notes.mygn AS mygn,  
    notes.genre AS genre,  
    COUNT(*) AS Comptage_1
    FROM 
    notes
    WHERE 
    notes.CLas = 1
    AND  notes.mygn BETWEEN 0 AND 3
    AND  notes.genre = 'G'
    GROUP BY 
    notes.CLas,  
    notes.mygn,  
    notes.genre
    ]
    // exécution de la requête 1
    SI PAS HExécuteRequêteSQL(sdRQ1,sMaRequete) ALORS Erreur(HErreurInfo); RETOUR
    sMaRequete = [
    SELECT 
    notes.CLas AS CLas,	
    notes.mygn AS mygn,	
    notes.genre AS genre,	
    COUNT(*) AS Comptage_1
    FROM 
    notes
    WHERE 
    notes.CLas = 1
    AND	notes.mygn BETWEEN 3 AND 5
    AND	notes.genre = 'G'
    GROUP BY 
    notes.CLas,	
    notes.mygn,	
    notes.genre 
    ]
    SI PAS HExécuteRequêteSQL(sdRQ1,sMaRequete) ALORS Erreur(HErreurInfo); RETOUR
    sMaRequete = [
    SELECT 
    notes.CLas AS CLas,	
    notes.mygn AS mygn,	
    notes.genre AS genre,	
    COUNT(*) AS Comptage_1
    FROM 
    notes
    WHERE 
    notes.CLas = 1
    AND	notes.mygn = 5
    AND	notes.genre = 'G'
    GROUP BY 
    notes.CLas,	
    notes.mygn,	
    notes.genre
    ]
    SI PAS HExécuteRequêteSQL(sdRQ1,sMaRequete) ALORS Erreur(HErreurInfo); RETOUR
    sMaRequete = [
    SELECT 
    notes.CLas AS CLas,	
    notes.mygn AS mygn,	
    notes.genre AS genre,	
    COUNT(*) AS Comptage_1
    FROM 
    notes
    WHERE 
    notes.CLas = 1
    AND	notes.mygn BETWEEN 5 AND 7
    AND	notes.genre = 'G'
    GROUP BY 
    notes.CLas,	
    notes.mygn,	
    notes.genre
    ]
    SI PAS HExécuteRequêteSQL(sdRQ1,sMaRequete) ALORS Erreur(HErreurInfo); RETOUR
    sMaRequete = [
    SELECT 
    notes.CLas AS CLas,	
    notes.mygn AS mygn,	
    notes.genre AS genre,	
    COUNT(*) AS Comptage_1
    FROM 
    notes
    WHERE 
    notes.CLas = 1
    AND	notes.mygn >= 7
    AND	notes.genre = 'G'
    GROUP BY 
    notes.CLas,	
    notes.mygn,	
    notes.genre
    ]
    // rempli la table
    ConstruitTableFichier(TABLE_1,sdRQ1,taRemplirTable)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je pense qu'il est bien plus efficace de tout regrouper dans une seule requête:
    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
     
    select notes.CLas AS CLas,  
    notes.genre AS genre,
    sum(case when notes.mygn  between 0 and 3 then 1 else 0 end) as c1,
    sum(case when notes.mygn  between 3 and 5 then 1 else 0 end) as c2,
    sum(case when notes.mygn  between 5 and 5 then 1 else 0 end) as c3,
    sum(case when notes.mygn  between 5 and 7 then 1 else 0 end) as c4,
    sum(case when notes.mygn  between 7 and 10 then 1 else 0 end) as c5,
    notes
    WHERE 
    notes.CLas = 1
    GROUP BY 
    notes.CLas,  
    notes.genre

    Tatayo.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2012
    Messages : 157
    Points : 39
    Points
    39
    Par défaut
    merci de votre attention
    mais le code ne marche pas!

  4. #4
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Dans la requête de Tatayo il suffit d'enlever notes.CLas du SELECT et du GROUP BY
    Et remettre le FROM oublié avant le fichier notes (mauvais copié/collé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT
    notes.genre AS genre,
    sum(case when notes.mygn  BETWEEN 0 AND 3 then 1 else 0 end) AS c1,
    sum(case when notes.mygn  BETWEEN 3 AND 5 then 1 else 0 end) AS c2,
    sum(case when notes.mygn  BETWEEN 5 AND 5 then 1 else 0 end) AS c3,
    sum(case when notes.mygn  BETWEEN 5 AND 7 then 1 else 0 end) AS c4,
    sum(case when notes.mygn  BETWEEN 7 AND 10 then 1 else 0 end) AS c5
    FROM
    notes
    WHERE 
    notes.CLas = 1
    GROUP BY 
    notes.genre
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2012
    Messages : 157
    Points : 39
    Points
    39
    Par défaut
    Merci a vous tous

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2012
    Messages : 157
    Points : 39
    Points
    39
    Par défaut
    bonsoir
    désoler d'ouvrir le sujet une deuxième fois j essayé d'ajouter la ligne total avec la fonction FAA mais cette méthode ne me donne pas c que je cherche .
    j essayé avec du sql mais j parviens pas je demande votre aide svp.

    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
    LOCAL
    	sMaRequete est une chaîne
    	sdRQ1 est une Source de Données
     
     
    sMaRequete = [
    SELECT 
    SUM(CASE WHEN ( CC1.MGCC1 >= 7 )  THEN  1 ELSE  0 END ) AS c5, 
    SUM(CASE WHEN ( CC1.MGCC1 BETWEEN  5AND  7 )  THEN  1 ELSE  0 END ) AS c4,  
    SUM(CASE WHEN ( CC1.MGCC1 = 5 )  THEN  1 ELSE  0 END ) AS c3,  
    SUM(CASE WHEN ( CC1.MGCC1 BETWEEN  3 AND  5 )  THEN  1 ELSE  0 END ) AS c2,  
    SUM(CASE WHEN ( CC1.MGCC1 BETWEEN  0 AND  3 )  THEN  1 ELSE  0 END ) AS c1,  
    CC1.genre AS genre
    FROM 
    CC1
    WHERE 
    CC1.cLSS = 1
    GROUP BY 
    CC1.genre
    ]
     
    // exécution de la requête 1
    SI PAS HExécuteRequêteSQL(sdRQ1,sMaRequete) ALORS Erreur(HErreurInfo); RETOUR
     
    // rempli la table
    ConstruitTableFichier(Table1,sdRQ1,taRemplirTable)
     
    ExécuteFAA(TableEnumèreColonne(Table1,1),faaColonneAjouteTotal)
    ExécuteFAA(TableEnumèreColonne(Table1,2),faaColonneAjouteTotal)
    ExécuteFAA(TableEnumèreColonne(Table1,3),faaColonneAjouteTotal)
    ExécuteFAA(TableEnumèreColonne(Table1,4),faaColonneAjouteTotal)
    ExécuteFAA(TableEnumèreColonne(Table1,5),faaColonneAjouteTotal)

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    il faut que la requête renvoie une ligne de plus contenant les différents totaux.
    Rien de bien compliqué, il faut faire une union de 2 requêtes:
    1. celle qui renvoie les totaux par genre
    2. une autre qui renvoie les totaux tout genre confondu

    vite fait mal fait:
    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
     
    SELECT 
    SUM(CASE WHEN ( CC1.MGCC1 >= 7 )  THEN  1 ELSE  0 END ) AS c5, 
    SUM(CASE WHEN ( CC1.MGCC1 BETWEEN  5AND  7 )  THEN  1 ELSE  0 END ) AS c4,  
    SUM(CASE WHEN ( CC1.MGCC1 = 5 )  THEN  1 ELSE  0 END ) AS c3,  
    SUM(CASE WHEN ( CC1.MGCC1 BETWEEN  3 AND  5 )  THEN  1 ELSE  0 END ) AS c2,  
    SUM(CASE WHEN ( CC1.MGCC1 BETWEEN  0 AND  3 )  THEN  1 ELSE  0 END ) AS c1,  
    CC1.genre AS genre
    FROM 
    CC1
    WHERE 
    CC1.cLSS = 1
    GROUP BY 
    CC1.genre
    union
    SELECT 
    SUM(CASE WHEN ( CC1.MGCC1 >= 7 )  THEN  1 ELSE  0 END ) AS c5, 
    SUM(CASE WHEN ( CC1.MGCC1 BETWEEN  5AND  7 )  THEN  1 ELSE  0 END ) AS c4,  
    SUM(CASE WHEN ( CC1.MGCC1 = 5 )  THEN  1 ELSE  0 END ) AS c3,  
    SUM(CASE WHEN ( CC1.MGCC1 BETWEEN  3 AND  5 )  THEN  1 ELSE  0 END ) AS c2,  
    SUM(CASE WHEN ( CC1.MGCC1 BETWEEN  0 AND  3 )  THEN  1 ELSE  0 END ) AS c1,  
    'TOTAL'
    FROM 
    CC1
    WHERE 
    CC1.cLSS = 1

    Tatayo.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2012
    Messages : 157
    Points : 39
    Points
    39
    Par défaut
    Merci infiniment c génial et simple Bravo!

    Tatayo

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/05/2010, 12h28
  2. [AC-2007] Plusieurs requêtes dans une seule liste déroulante
    Par Razorback dans le forum IHM
    Réponses: 5
    Dernier message: 29/04/2009, 14h09
  3. Réponses: 5
    Dernier message: 21/06/2007, 08h49
  4. plusieurs tables dans une seule table
    Par scully2501 dans le forum Access
    Réponses: 1
    Dernier message: 10/10/2005, 09h19
  5. Regrouper 3 requêtes dans une seule
    Par LadyArwen dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/06/2003, 09h32

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