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

Langage SQL Discussion :

Soustraction dans une seul Table ?


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Soustraction dans une seul Table ?
    Gestion d'une compétition Sportive. On souhaite afficher le classement des concurrents après une épreuve sportive.
    J'ai les 2 tables suivantes:


    Table1:

    CONCURRENT

    Numéro-------- NOM
    1 --------------- A
    2 --------------- B
    3 --------------- C
    4 --------------- D
    5 --------------- E



    Table2:

    RÉSULTAT

    N°_CONC-------TEMPS
    1 -------------- 3.25
    2 -------------- 3.15
    3 -------------- 3.09
    4 -------------- 3.08
    5 -------------- 3.11
    Comment faire pour créer une procédure stockée qui me permet de remplir une nouvelle table qui ce Nome:

    CLASSEMENT

    Rang ---- Nom ---- Ecart

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    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 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Inutile de créer une table pour une seule requête SQL simplounette :

    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
    CREATE TABLE CONCURRENT (Numero INT, NOM VARCHAR(16))
    INSERT INTO CONCURRENT  VALUES (1, 'A')
    INSERT INTO CONCURRENT  VALUES (2, 'B')
    INSERT INTO CONCURRENT  VALUES (3, 'C')
    INSERT INTO CONCURRENT  VALUES (4, 'D')
    INSERT INTO CONCURRENT  VALUES (5, 'E')
     
     
    CREATE TABLE RESULTAT (N_CONC INT, TEMPS DECIMAL(16,2))
    INSERT INTO RESULTAT VALUES (1, 3.25)
    INSERT INTO RESULTAT VALUES (2, 3.15)
    INSERT INTO RESULTAT VALUES (3, 3.09)
    INSERT INTO RESULTAT VALUES (4, 3.08)
    INSERT INTO RESULTAT VALUES (5, 3.11)
     
     
    -- en SQL 2 :
    SELECT  NOM, RANG, (SELECT MIN(TEMPS) 
                        FROM RESULTAT) - (SELECT TEMPS
                                          FROM   RESULTAT AS RR
                                          WHERE  RR.N_CONC = C.Numero) AS ECART
    FROM    (SELECT R1.N_CONC, COUNT(*) AS RANG
             FROM   RESULTAT AS R1
                    INNER JOIN RESULTAT AS R2
                         ON R1.TEMPS >= R2.TEMPS
             GROUP  BY R1.N_CONC) AS T
            INNER JOIN CONCURRENT AS C 
                  ON T.N_CONC = C.Numero
    ORDER BY RANG
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NOM              RANG        ECART               
    ---------------- ----------- ------------------- 
    D                1           .00
    C                2           -.01
    E                3           -.03
    B                4           -.07
    A                5           -.17
    en SQL:2003 la plus important requête se simplifie en utilisant soit la fonction de fenêtrage RANK() ou DENSE_RANK()

    A +

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci, S'amarche.

    Est ce que c'est possible D'utiliser cette requête pour Remplir une nouvelle table .
    (C.a.d placer ces données dans une nouvelle table)

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    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 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Quel est l'intérêt ? Par principe des données calculées ne doivent jamais être statifiées par exemple en les réinjectant dans une table...
    Le risque de désynchronisation peut être grand et votre base risque d'être incohérente.

    A +

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    ok. Merci

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Et si par exemple j'ai des concurrents AVEC le meme Resultat (Temps réalisé)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     CREATE TABLE RESULTAT (Numero_CONC INT, TEMPS DECIMAL(16,2))
    INSERT INTO RESULTAT VALUES (1, 3.25)
    INSERT INTO RESULTAT VALUES (2, 3.15)
    INSERT INTO RESULTAT VALUES (3, NULL)
    INSERT INTO RESULTAT VALUES (4, 3.16)
    INSERT INTO RESULTAT VALUES (5, 3.14)
    INSERT INTO RESULTAT VALUES (6, 3.15)
    INSERT INTO RESULTAT VALUES (7, 3.09)
    INSERT INTO RESULTAT VALUES (8, 3.10)
    INSERT INTO RESULTAT VALUES (9, 3.10)
    INSERT INTO RESULTAT VALUES (0, 3.19)


    Le seul Probleme c'est le Rang ?
    Ca donne:

    Rang
    1
    3
    3
    4
    6
    6
    7
    8
    9

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    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 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    C'est normal pour les ex æquo.
    Cependant vous pouvez changer l'élément du comptage en le prenant dans la table 2. par exemple au lieu de COUNT(*), faire : COUNT(DISTINCT R2.TEMPS)

    A +

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    thanxxxxxxxxxxxx

    Juste une dernière question: Comment faire pour peupler une table déjà créer dans ma base ? (je pense que c'est simple de visualiser le contenu de ma nouvelle table Classement
    Select * from Classement

    c mieux que de réécrire tout le code de La requête

    )


    J'ai essayé avec Update Set ..
    J'arrive pasDois-je déclarer Une Variable pour chaque Ligne?Colonne

    Pouvez-vs me dire comment faire pour enregistrer par exemple la première ligne De la requête dans ma Table CASSEMNET?

Discussions similaires

  1. [MySQL] l'ajout Des Données de 3 tables dans une seule table apres validation
    Par sooprano dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/11/2008, 16h54
  2. Access soustraction dans une même table
    Par vero12 dans le forum IHM
    Réponses: 11
    Dernier message: 09/04/2008, 16h55
  3. import dans une seule table
    Par mike2302 dans le forum VBA Access
    Réponses: 10
    Dernier message: 28/06/2007, 07h03
  4. Réponses: 5
    Dernier message: 21/06/2007, 08h49
  5. plusieurs tables dans une seule table
    Par scully2501 dans le forum Access
    Réponses: 1
    Dernier message: 10/10/2005, 09h19

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