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

  1. #1
    Membre régulier
    Résultat de la requête en deux colonnes avec une seule ligne
    salut
    j'ai une requête suivante:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        SELECT COUNT(CODE_etud) as Nombre_étudiantes
         FROM etudiantes
         WHERE code_spécialite='001'
    UNION
         SELECT COUNT(CODE_etud) as Nombre_étudiantes_Étrangers
         FROM etudiantes
         WHERE code_spécialite='001'
         AND N_Pays<>1


    résultat de cette requête est: deux lignes (1ere ligne =2) (2eme ligne =5)
    Y a-t-il une possibilité de rendre le résultat de la requête en deux colonnes avec une seule ligne
    le pb est que la condition de Nombre_étudiantes et Nombre_étudiantes_Étrangers n'est pas la même
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
     SELECT COUNT(CODE_etud) as Nombre_étudiantes,COUNT(CODE_etud) as Nombre_étudiantes_Étrangers
    Delphi installés : RAD Studio 10.4 ..........Programme VCL
    SGBD : Firebird 2.5
    générateurs Etats : FastReport, QuickReport
    OS : Window 7 64bit

  2. #2
    Membre régulier
    sollution est utilise l'instruction WITH
    Je l'ai appris de SergioMaster
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    WITH R1 AS
    (SELECT COUNT(CODE_etud) as Nombre_étudiantes
         FROM etudiantes
         WHERE code_spécialite='001'),
    ,R2 AS 
    (    SELECT COUNT(CODE_etud) as Nombre_étudiantes_Étrangers
         FROM etudiantes
         WHERE code_spécialite='001'
         AND N_Pays<>1)
     SELECT R1.Nombre_étudiantes,R2.Nombre_étudiantes_Étrangers
    FROM R1,R2
    Delphi installés : RAD Studio 10.4 ..........Programme VCL
    SGBD : Firebird 2.5
    générateurs Etats : FastReport, QuickReport
    OS : Window 7 64bit

  3. #3
    Rédacteur/Modérateur

    Oui, c'est une solution
    Mais Non, ce n'est pas forcément la seule, pour preuve rapidement :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SELECT COUNT(1) NB_ETUDIANTS,SUM(IIF(NATION=1,0,1)) ETRANGER FROM ETUDIANT

    fourni le même résultat avec des stats d'exécution sur jeu d'essai réduit(4)

    Starting transaction...
    Preparing query: SELECT COUNT(1) NB_ETUDIANTS,SUM(IIF(NATION=1,0,1)) ETRANGER FROM ETUDIANT
    Prepare time: 0.010s
    Field #01: .COUNT Alias:NB_ETUDIANTS Type:BIGINT
    Field #02: .SUM Alias:ETRANGER Type:BIGINT
    PLAN (ETUDIANT NATURAL)

    Executing...
    Done.
    10 fetches, 0 marks, 0 reads, 0 writes.
    0 inserts, 0 updates, 0 deletes, 0 index, 4 seq.
    Delta memory: 38880 bytes.
    Total execution time: 0.025s

    l'utilisation avec des CTE (Common Table Expression) qui est le terme que vous auriez du écrire plutôt que WITH (ce mot clé pouvant être employé pour d'autre chose)
    Preparing query: WITH R1 AS (SELECT COUNT(ID) as Nombre_E FROM etudiant)
    ,R2 AS(SELECT COUNT(ID) as Nombre_EE
    FROM etudiant
    WHERE NATION<>1)

    SELECT R1.Nombre_E,R2.Nombre_EE
    FROM R1,R2
    Prepare time: 0.013s
    Field #01: . Alias:NOMBRE_E Type:BIGINT
    Field #02: . Alias:NOMBRE_EE Type:BIGINT
    PLAN JOIN (R1 ETUDIANT NATURAL, R2 ETUDIANT NATURAL)


    Executing...
    Done.
    21 fetches, 0 marks, 0 reads, 0 writes.
    0 inserts, 0 updates, 0 deletes, 0 index, 8 seq.
    Delta memory: 56880 bytes.
    Total execution time: 0.026s
    ou encore sans CTE
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(1) NB_ETUDIANTS,
                        SELECT(COUNT(1) FROM ETUDIANT WHERE NATION<>1 ETRANGER  
     FROM ETUDIANT

    Preparing query: SELECT COUNT(1) NB_ETUDIANTS,
    (SELECT COUNT(1) FROM ETUDIANT WHERE NATION<>1) ETRANGER
    FROM ETUDIANT
    Prepare time: 0.011s
    Field #01: .COUNT Alias:NB_ETUDIANTS Type:BIGINT
    Field #02: .COUNT Alias:ETRANGER Type:BIGINT
    PLAN (ETUDIANT NATURAL)
    PLAN (ETUDIANT NATURAL)


    Executing...
    Done.
    21 fetches, 0 marks, 0 reads, 0 writes.
    0 inserts, 0 updates, 0 deletes, 0 index, 8 seq.
    Delta memory: 49312 bytes.
    Total execution time: 0.022s
    Bien sûr sur un jeu d'essai aussi réduit (4 lignes) c'est peut-être peu flagrant qu'en serait-il sur une centaine ou plus ? Je vous laisse tester

    Le fait que ce soit Firebird 2.5 enlève bien évidemment la possibilité d'utiliser les fonctions de fenêtrage
    (ça c'est pour la critique que pourrait me faire quelqu'un)
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  4. #4
    Membre régulier
    Merci beaucoup pour les informations et l'assistance que vous nous fournissez.
    Je pense qu'il est temps de se tourner vers firebird 3.0
    merci
    Delphi installés : RAD Studio 10.4 ..........Programme VCL
    SGBD : Firebird 2.5
    générateurs Etats : FastReport, QuickReport
    OS : Window 7 64bit

  5. #5
    Expert éminent sénior
    Salut à tous.

    Citation Envoyé par delphi2019
    Y-a-t-il une possibilité de rendre le résultat de la requête en deux colonnes avec une seule ligne
    Oui, avec un case :
    --> https://firebirdsql.org/refdocs/lang...pd15-case.html

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  sum(case when code_spécialite = '001'                 then 1 else 0 end) as Nombre_étudiantes,
            sum(case when code_spécialite = '001' and N_Pays <> 1 then 1 else 0 end) as Nombre_étudiantes_Étrangers
      FROM  etudiantes;

    Je n'ai pas testé, donc à vérifier si la syntaxe est bonne.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  6. #6
    Membre régulier
    merci
    Delphi installés : RAD Studio 10.4 ..........Programme VCL
    SGBD : Firebird 2.5
    générateurs Etats : FastReport, QuickReport
    OS : Window 7 64bit

###raw>template_hook.ano_emploi###