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

Développement SQL Server Discussion :

Transformer toutes les colonnes en lignes


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 0
    Points
    0
    Par défaut Transformer toutes les colonnes en lignes
    Bonjour les développeurs,
    J'ai une table avec 47 colonnes les données sont stockées sous cette disposition,

    +------+-------+------+------+------+------------+
    | col1 | col2  | col3 | col4 | col5 | Date       |
    +------+-------+------+------+------+------------+
    |  10  |  07   | 22   |  98  |  932 | 06/01/2014 |
    +------+-------+------+------+------+------------+
    |  56  |  33   | 20   |  01  |  3   | 07/01/2014 |
    +------+-------+------+------+------+------------+
    Ce que je veux est que je puisse trouver une requête du genre pivot qui modifie l'affichage de cette manière,

    +-------+-------------+------------+
    |  Date |  06/01/2014 | 07/01/2014 | 
    +-------+-------------+------------+
    | col1  |  10         | 56         |
    +-------+-------------+------------+
    | col2  |  07         | 33         |
    +-------+-------------+------------+
    | col3  |  22         | 20         |
    +-------+-------------+------------+
    | col4  |  98         | 01         |
    +-------+-------------+------------+
    | col5  |  932        | 03         |
    +-------+-------------+------------+
    svp une requête qui transforme tous les colonnes en lignes de la façon ci dessus.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Certain SGBDR implémentent le PIVOT

    Quel est le votre ?

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 0
    Points
    0
    Par défaut Microsoft SQL Server 2008 R2
    Je travaille sous Microsoft SQL Server 2008 R2

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    alors ça tombe bien !

    Si c'est uniquement pour de l'affichage, il pourrait cependant être plus simple et surtout plus performant de faire l'opération dans la partie client

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Oh pitié aieeeuuuuu j'ai besoin des réponses concrètes au lieu des théories, excusez-moi. Que voulez-vous dire par client et comment l'implémenter?

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Citation Envoyé par Espoirwakal Voir le message
    J'ai une table avec 47 colonnes les données sont stockées sous cette disposition,

    +------+-------+------+------+------+------------+
    | col1 | col2  | col3 | col4 | col5 | Date       |
    +------+-------+------+------+------+------------+
    Si telle est la structure de ta table, c'est qu'elle est (très) mal modélisée.

    Qu'avais-tu déjà testé comme requêtes ?

    aieeeuuuuu t'a donné les liens vers la syntaxe des opérateurs PIVOT et UNPIVOT qui devraient te permettre de résoudre ton problème.

    Reviens avec ce que tu as essayé de mettre en oeuvre et nous t'aiderons pour la mise au point.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    ce que je veux dire par client, c'est votre programme qui lance la requete, et gère l'affichage : vous pouvez récupérer vos données telles qu'elle sont dans la base de données, et effectuer la transformation lors de l'affichage avec le langage que vous utilisez pour l'affichage (asp, php, c#, ...)

    tout dépend du contexte.

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Je ne sais pas si ma question est claire, moi ce que je cherche ce une requête qui va pivoter l'affichage comme indiqué ci-haut. Dites-moi si c'est possible, si oui une illustration serais super géniale. Je pense qu'une requête augmenterais les performances de mon application web que de gérer plusieurs boucles dans la partie cliente.

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    possible ? oui et non !

    L'opération pivot (et unpivot) est possible avec SQL server, et vous trouverez les exemples que vous demandez dans le lien que je vous ai donné.

    Cependant dans votre cas, vous comptez vous appuyez sur des dates (qui donneront des colonnes) j'imagine que ces dates vont changer, donc vous devrez modifier la requête à chaque fois(les dates devront être en dur dans la requête) !

    faire le pivot dans votre application comme suggéré ne vous demandera que deux boucles imbriquées

  10. #10
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    En plus, si mes souvenirs sont bons, les pivots ne fonctionne que sur des valeurs numériques avec formule d'agrégation non ? (me semble que je me suis déjà cassé les dents là-dessus)

    Pour moi, c'est aussi quelque chose à faire dans le client.
    Kropernic

  11. #11
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Sinon, il y a la procédure sp_transpose proposée par Arian Papillon (je n'ai pas testé)
    Blog Perso | Kankuru (logiciel gratuit pour SQL Server)

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    aieeeuuuuu je vous remercie sincèrement de prêter autant d'attention à ma préoccupation, et je pense que si ça marche ça aiderai beaucoup des développeurs.

    Je peux grouper les valeurs de mes colonnes par mois et années avec l'option sql mont(mois) et year(annee) J'aimerais que mon affichage pivot soie dynamique, étant données que mes valeurs serons groupés au fur et à mesure qu'il y aura des ajouts des lignes.

    Kropernic ne t'en fait pas, toutes mes valeurs comme vous les voyez sont en numériques excepté la colonne date.

    Et j'ai remarqué comme-si l'opérateur pivot ne marche qu'avec un nombre très limité des colonnes, si je me souvient, il y a une colonne libellé, une colonne valeur et une colonne temps ou date.

    mais moi je veut une procédure qui marchera pour toutes mes colonnes et leurs valeurs.

  13. #13
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par Espoirwakal Voir le message
    Je peux grouper les valeurs de mes colonnes par mois et années avec l'option sql mont(mois) et year(annee) J'aimerais que mon affichage pivot soie dynamique, étant données que mes valeurs serons groupés au fur et à mesure qu'il y aura des ajouts des lignes.
    [...]
    mais moi je veut une procédure qui marchera pour toutes mes colonnes et leurs valeurs.
    Alors il faudra faire du SQL dynamique en construisant votre requête avec... des boucles. Lesquelles de surcroit s'appuieront sur une autre requete pour récupérer la liste des dates

    Je ne comprends toujours pas pourquoi vous ne voulez pas faire ça dans la partie client : si c'est par crainte des performances, elles ne seront certainement pas pires que de la faire dans le SGBDR. (deux boucles imbriquées restent quand même à la portée d'un serveur web)
    Si c'est pour une autre raison, exposez là !

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Lorsque vous me parlez de le faire dans la partie cliente, pouvez vous un peu être pragmatique en me donnant un extrait ou exemple de code? je travaille sous ASP.NET VB.NET

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/09/2013, 18h30
  2. Insertion ligne vide dans une colonne, mais pas toutes les colonnes.
    Par gsekscor dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/04/2013, 22h33
  3. Sélectionner les lignes où toutes les colonnes sont remplies
    Par Stepsbysteps dans le forum Langage SQL
    Réponses: 10
    Dernier message: 18/04/2013, 12h07
  4. Lire toutes les colonnes pour chaque ligne
    Par L0007 dans le forum SAS Base
    Réponses: 6
    Dernier message: 08/03/2013, 14h38
  5. [9.1] Transformer les colonnes en lignes
    Par LaPanic dans le forum Requêtes
    Réponses: 7
    Dernier message: 10/12/2012, 11h27

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