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

SQL Firebird Discussion :

Comment passer ROW comme paramètre ?


Sujet :

SQL Firebird

  1. #1
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    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 retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    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
    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
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    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...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    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, 12h56
  2. Réponses: 3
    Dernier message: 17/10/2014, 16h08
  3. Passer méthode comme paramètre
    Par paesportcomputing dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 16/11/2011, 22h20
  4. comment passer un ArrayList comme paramètre d'une méthode
    Par itmak dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 22/11/2008, 10h31
  5. Réponses: 2
    Dernier message: 05/04/2007, 13h55

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