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
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    octobre 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 82
    Points : 33
    Points
    33

    Par défaut Comment passer ROW comme paramètre ?

    bonjour,

    deux tables de ma base de données

    Table1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    +----+----------+------------+
    | id | nom      | note       | 
    +----+----------+------------+
    |  1 | Bertrand | 17         | 
    |  2 | Charles  | 10         |
    |  3 | Alex     | 12         | 
    |  4 | David    | 11         | 
    |  5 | Eric     | 20         | 
    |  6 | François | 20         |
    |  7 | Gaston   | 18         | 
    |  8 | Henri    | 20         | 
    +----+----------+------------+
    Table2
    contient combien d'étudiants dans chaque groupe en fonction de leur nombre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    -------------------------------------------
     Nombretudiant| group1 | group2 | group3 |
     -----------------------------------------
           1      |    1   |   0    |   0    |  
           2      |    2   |   0    |   0    |
           3      |    2   |   1    |   0    |
           4      |    2   |   2    |   0    |
           5      |    2   |   2    |   1    |
     -----------------------------------------
    Je veux diviser les étudiants en 3 groupes, et les étudiants avec les notes les plus élevées doivent aller dans le premier groupe, etc., et les étudiants ne doivent pas être répétés dans d'autres groupes. J'ai dans Table1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select  count(id) from table1 as total
    , puis je cherche dans la table2 la ligne où la colonne Nombretudiant =total de chaque groupe

    Par exemple, si j'ai 5 étudiants, je les divise en 3 groupes en fonction du nombre de Table2.

    Tableau 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NumberStudent| group1 | group2 | group3 |
    -----------------------------------------
          5      |    2   |   2    |   1    |
    J'ai 2 étudiants du groupe 1, 2 étudiants du groupe 2, 1 étudiant du groupe 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select nom,note from Table1 
    where note >=10
    order by note row //from table2 (comment puis-je obtenir le nombre de ROW = 2 comme paramètre )
    Le groupe 2 a 2 étudiants qui ne sont pas trouvés dans le groupe1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select nom,note from Table1 
    where note >=15 and id<> id // l'étudiant en groupe2 ne mentionne pas en groupe1
    order by note  row //from table2 (group2 pour 5 étudiants est 2, donc ROW = 2)
    Le groupe 3 a 1 étudiant qui ne sont pas trouvés dans le groupe1 et groupe2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select nom,note from Table1 
    where note >17 and id<> id // l'étudiant en groupe2 ne mentionne pas dans groupe1 and groupe 2
    order by note row //from table2 (group3 pour 5 étudiants est 1, donc ROW = 1)
    Le résultat devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      1  Henri     20    group1      
      2  Eric      20    group1        
      3  François  20    group2            
      4  Gaston    18    group2           
      5  Bertrand  17    group3
    ou il y a une autre méthode

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    9 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 9 849
    Points : 24 306
    Points
    24 306
    Billets dans le blog
    17

    Par défaut

    Bonjour,

    AMHA la réponse n'est pas dans le passage de paramètre mais dans une CTE récursive seulement je doit avouer que je n'ai pas (pour l'instant) la moindre envie intellectuelle de me lancer dans une proposition.
    Les requêtes récursives j'ai du en faire ou en présenter quelques unes dans ce forum, un peu de recherche dans ce forum ou google donneront les pistes
    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 (Berlin, Tokyo) 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

  3. #3
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    18 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 18 419
    Points : 43 034
    Points
    43 034

    Par défaut

    Si FireBird supporte les fonctions de fenêtrage (norme SQL de 1999) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *, NTILE(3) OVER(ORDER BY note) AS GROUPE_NOTE
    FROM   MaTable;
    Ensuite un PIVOT si la commande PIVOT existe dans FireBird, sinon, à faire dans Excel avec les tableaux croisés.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  4. #4
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    octobre 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 82
    Points : 33
    Points
    33

    Par défaut

    merci de vos réponses

    cela signifie qu'il est difficile de le résoudre avec cette méthode avec Firebird?

    Y a-t-il une autre mmethode simple de résoudre ce problème?

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/12/2016, 13h56
  2. Réponses: 3
    Dernier message: 17/10/2014, 17h08
  3. Passer méthode comme paramètre
    Par paesportcomputing dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 16/11/2011, 23h20
  4. Réponses: 7
    Dernier message: 22/11/2008, 11h31
  5. Réponses: 2
    Dernier message: 05/04/2007, 14h55

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