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 :

Plusieurs colonnes au lieu de plusieurs lignes


Sujet :

Langage SQL

  1. #1
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut Plusieurs colonnes au lieu de plusieurs lignes
    Bonjour

    Je développe un programme de tennis de table.
    Chaque saison est coupée en deux par deux phases. Chaque phase dure 4 mois et 8 mois. A la fin de chaque phase, une dérive est appliquée, chaque joueur perdra alors le nombre de points de la dérive.
    J'ai deux tables (entre autres mais je ne montre que celles-ci) :
    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
     
    CREATE TABLE TSeason (
      idSeason INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      StartYear SMALLINT UNSIGNED NOT NULL,
      PRIMARY KEY(idSeason)
    )
     
    CREATE TABLE TPhase (
      idPhase INTEGER NOT NULL AUTO_INCREMENT,
      idSeason INTEGER UNSIGNED NOT NULL,
      BeginDate DATE NULL,
      EndDate DATE NULL,
      Drift DOUBLE NULL,
      PhaseNumber SMALLINT NOT NULL,
      PRIMARY KEY(idPhase),
      INDEX TPhase_FKIndex1(idSeason)
    );
    L'ID de chaque saison est donc référencée par deux phases (PhaseNumber = 1 ou 2).

    Je cherche à faire une requête telle qu'elle me retourne chaque saison avec ses deux dérives. Je ne veux pas plusieurs ligne car la gestion des listes des saisons (une ligne de la liste par record) dans le programme devient beaucoup plus compexe si je dois fusionner plusieurs lignes.
    Ma table TPhase doit rester telle quelle car chaque match est assigné à une phase.

    Je crois qu'on peut faire des selects dans des select mais je ne trouve pas la syntaxe...
    Vous avez une idée ?

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    L'ID de chaque saison est donc référencée par deux phases (PhaseNumber = 1 ou 2).

    Je cherche à faire une requête telle qu'elle me retourne chaque saison avec ses deux dérives.
    Dérive = phase ?

    Quel est ton SGBD ?

    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
    SELECT s.idSeason, s.StartYear,
      p1.idPhase AS idPhase1,
      p1.BeginDate AS BeginDate_Phase1,
      p1.EndDate AS EndDate_Phase1,
      p1.Drift AS Drift_Phase1,
      p2.idPhase AS idPhase2,
      p2.BeginDate AS BeginDate_Phase2,
      p2.EndDate AS EndDate_Phase2,
      p2.Drift AS Drift_Phase2
    FROM TSeason s
    INNER JOIN TPhase p1 
      ON p1.idSeason = s.idSeason
      AND p1.PhaseNumber = 1
    INNER JOIN TPhase p2
      ON p2.idSeason = s.idSeason
      AND p2.PhaseNumber = 2
    ORDER BY s.StartYear
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  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 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    C'est du MySQL vu la syntaxe profondément débile du CREATE TABLE qui mélange logique et physique (INDEX).

    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
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    La base de données est en SQLite3, la syntaxe est juste faite pour faire comprendre mon besoin, elle a été générée par DBDesigner mais tel quelle ça ne fonctionne pas sour SQLite3
    La syntaxe qui fonctionne est celle-ci :
    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
            CREATE TABLE TSeason (
              idSeason INTEGER PRIMARY KEY AUTOINCREMENT,
              StartYear INTEGER NOT NULL
            );
            CREATE TABLE TPhase (
              idPhase INTEGER PRIMARY KEY AUTOINCREMENT,
              idSeason INTEGER NOT NULL,
              PhaseNumber SMALLINT NOT NULL,
              BeginDate DATE NOT NULL,
              EndDate DATE NOT NULL,
              Drift DOUBLE NULL,
              FOREIGN KEY(idSeason)
                REFERENCES TSeason(idSeason)
                  ON DELETE CASCADE
                  ON UPDATE CASCADE
            );
    Dérive = phase ? Non, dans chaque phase, il y a une dérive, et une saison est composée de deux phases.
    Chaque match joué est associé à une phase. La question n'étais pas là....

    Merci d'avoir déplacé cette discussion et désolée de l'avoir mal placée.

  5. #5
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Mais la réponse de CinePhil doit répondre a votre besoin non ?
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  6. #6
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Je suis désolé, je n'avais pas vu la réponse... et en effet un ENORME merci pour cette réponse qui fonctionne super bien !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 18/09/2013, 12h13
  2. transformer liste d'1 colonne sur x pages => plusieurs colonnes sur UNE page
    Par liste excel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/05/2011, 11h13
  3. [XL-2003] Modification d'un code pour rechercher sur plusieurs colonnes au lieu d'une
    Par chipster008 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/05/2011, 14h10
  4. [AC-2003] Scinder une colonne de valeurs en plusieurs colonnes
    Par valy_442 dans le forum IHM
    Réponses: 1
    Dernier message: 01/12/2010, 13h18
  5. Réponses: 2
    Dernier message: 11/01/2007, 12h56

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