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 : 61
    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 048
    Points
    34 048
    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.

  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

  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 103
    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 103
    Points : 31 546
    Points
    31 546
    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é.

+ 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