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 :

Passer de données en ligne a des données en colonnes


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 60
    Points
    60
    Par défaut Passer de données en ligne a des données en colonnes
    Bonjour,

    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 CODE,WEEK, JOUR,NUM,ANS
    FROM AD_TITR_MAIN,AD_TITR_SWAN,AD_TITR_SWAN_RAW
    where STATUS = 1
    and AD_TITR_MAIN.IDKEY=74461
    and AD_TITR_SWAN.key = AD_TITR_MAIN.KEY
    and AD_TITR_SWAN.status = 1
    and AD_TITR_SWAN_RAW.key = AD_TITR_SWAN.key
    and num in
    (SELECT B.CO_CODE FROM AD_CODES B, AD_CODES A
    WHERE B.CO_TAB = 'TITR_SWAN_CRITICAL'
    and (A.CO_TAB = ADP_CODES.GET_COMMENT_F('TST_TEST',300)
    or A.CO_TAB = ADP_CODES.GET_COMMENT_F('TST_TEST',305))
    and A.CO_CODE = B.CO_NUM
    )
    and status = 1
    GROUP BY IDKEY,CODE,KEY,WEEK,JOUR,Num, ANS
    ORDER BY CODE,KEY,WEEK,JOUR
    Avec cette requête, j'obtiens une sélection :

    CODE ----- WEEK ------JOUR ----- NUM ------ ANS
    300 --------1------- 05/06-------24 ---------- 2
    300 ----- -- 1 ------- 05/06 ------ 32 --------1
    300 -------- 1 ----- 05/06------- 46 --------3
    300 --------1 ------- 07/06 -------24 --------2
    300 -------- 1 ------- 07/06 -------32 --------0
    300 -------1 ---------07/06 ------46 ---------1


    La base de donnés contient les réponses a un questionnaire rempli quotidiennement pendant plusieurs semaine. NUM est le numéro de la question ici sélectionné selon la correspondance de ces questions avec une autre table. ANS est la réponse a chaque question.

    Je voudraid obtenir quelquechose du genre :

    CODE ----- WEEK ---- JOUR ----- QUES1 ---- QUES2 ---- QUES3
    300 -------- 1 -------05/06 ------ 2 -----------1-----------3
    300 --------1 -------07/06 ------ 2 ---------- 0 ----------1


    J'aimerai faire cela en une requete mais je ne vois pas du tout comment faire sachant que je ne dois pas entrer les numéros des question en "dure"


    Merci a tous ceux qui pourront m'aider

  2. #2
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 60
    Points
    60
    Par défaut
    Est-ce que c'est possible au moins?

  3. #3
    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
    Ce que vous cherchez à faire est de la cosmétique et n'est pas le boulot du SQL mais du langage de programmation de l'application qui utilise la BDD.
    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 !

  4. #4
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    il faut penser des jointure de plusieurs vues;
    veuillez bien illuster le cas
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    De votre requête faisons une vue :

    Code SQL : 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
     
    CREATE VIEW V (LeCode, Semaine, Jour, Num, ANS) 
    AS 
       SELECT CODE,WEEK, JOUR,NUM,ANS
       FROM AD_TITR_MAIN,AD_TITR_SWAN,AD_TITR_SWAN_RAW
       WHERE STATUS = 1
         AND AD_TITR_MAIN.IDKEY=74461
         AND AD_TITR_SWAN.KEY = AD_TITR_MAIN.KEY
         AND AD_TITR_SWAN.STATUS = 1
         AND AD_TITR_SWAN_RAW.KEY = AD_TITR_SWAN.KEY
         AND num IN
                  (SELECT B.CO_CODE FROM AD_CODES B, AD_CODES A
                   WHERE B.CO_TAB = 'TITR_SWAN_CRITICAL'
                   AND (A.CO_TAB = ADP_CODES.GET_COMMENT_F('TST_TEST',300)
                   OR A.CO_TAB = ADP_CODES.GET_COMMENT_F('TST_TEST',305))
                   AND A.CO_CODE = B.CO_NUM
                   )
         AND STATUS = 1
       GROUP BY IDKEY,CODE,KEY,WEEK,JOUR,Num, ANS


    La requête ci-dessous est conforme à la syntaxe SQL Server (utilisation par exemple de l’opérateur « + » de concaténation de chaînes).

    Cette requête passe par l’utilisation de la jointure récursive (que d’aucuns appellent l’union récursive, any way).

    Code SQL : 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
    30
     
    WITH R (LeCode, Semaine, Jour, Num, Ans, Sequence) AS
    (
        SELECT LeCode, Semaine, Jour, Num, CAST(Ans AS VARCHAR(512)), 1  
        FROM   V AS x
        WHERE  (SELECT COUNT(*)
                FROM   V AS y
                WHERE  x.LeCode = y.LeCode
                  AND  x.Semaine = y.Semaine
                  AND  x.Jour = y.Jour
                  AND  x.Num > y.Num) < 1
      UNION ALL
        SELECT x.LeCode, x.Semaine, x.Jour, x.Num
            , CAST (CAST(y.Ans AS VARCHAR(512)) + ' / ' + CAST(x.Ans AS VARCHAR(512)) AS VARCHAR(512))
            , Sequence + 1  
        FROM   V AS x JOIN R AS y 
               ON   x.LeCode = y.LeCode
               AND  x.Semaine = y.Semaine
               AND  x.Jour = y.Jour
               AND  x.Num > y.Num  
    )
    SELECT x.LeCode, x.Semaine, x.Jour, x.Ans  
    FROM   R AS x JOIN (SELECT LeCode, Semaine, Jour, MAX (Sequence) AS MaxSeq
                        FROM   R
                        GROUP BY LeCode, Semaine, Jour) AS y 
                  ON  x.LeCode = y.LeCode
                  AND x.Semaine = y.Semaine
                  AND x.Jour = y.Jour
                  AND x.Sequence = y.MaxSeq
    ORDER BY  LeCode, Semaine, Jour ;

    Les cracks de SQL sauront vraisemblablement la simplifier, voire se passer de la récursivité.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

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

Discussions similaires

  1. [Toutes versions] Croiser des données avec comme synthèse des données alphanumériques
    Par Philippe Tulliez dans le forum Contribuez
    Réponses: 0
    Dernier message: 19/02/2014, 08h48
  2. [XL-2007] Passer de données sous forme matricielle à des données en lignes
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/11/2011, 11h02
  3. Réponses: 4
    Dernier message: 04/05/2011, 14h11
  4. Réponses: 12
    Dernier message: 13/01/2010, 12h56
  5. Afficher des données en ligne
    Par manuman dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/03/2009, 14h28

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