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 :

(re)mettre à plat un produit cartésien


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de francis60
    Homme Profil pro
    Modélisation coût/process
    Inscrit en
    Août 2011
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Modélisation coût/process
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 178
    Points : 162
    Points
    162
    Par défaut (re)mettre à plat un produit cartésien
    Bonjour à tous,

    J'ai des données (Value) qui se présentent sous cette forme:

    Year Project JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
    2018 A 11 10 10 9 10 10 10 2 10 11 8 6
    2018 B 1 1 1 1 2 1 1 0 1 2 1 1
    2018 C 2 3 3 2 3 2 2 1 1 1 1 1
    2018 D 7 6 7 7 7 8 5 1 2 2 2 1
    2017 A 9 10 12 9 10 9 8 2 9 9 11 7
    2017 B 1 2 2 2 2 2 2 1 2 2 2 1
    2017 C 1 2 2 2 2 2 2 1 2 2 2 1
    2017 D 10 8 7 4 3 3 2 1 2 2 3 2

    et je souhaite les remettre à plat:

    Year Project Period Value
    2018 A JAN 11
    2018 A FEB 10
    2018 A MAR 10
    2018 A APR 9
    2018 A MAY 10
    2018 A JUN 10
    2018 A JUL 10
    2017 A JAN 9
    2017 ...

    J'ai pensé bêtement faire l'UNION de 12 SELECT mais c'est un peu long et si par exemple je cible un tableau où les noms de mois sont en français il faudra réécrire la requête.

    En option je souhaiterais cibler un tableau présenté en trimestres et que la requête fonctionne toujours

    Year Project Q1 Q2 Q3 Q4
    2018 A 11 10 10 9
    2018 B 1 1 1 1
    2018 C 2 3 3 2
    2018 D 7 6 7 7
    2017 A 9 10 12 9
    2017 B 1 2 2 2

    Year Project Period Value
    2018 A Q1 11
    2018 A Q2 10
    2018 A Q3 10
    2017 A Q4 9
    2017 A Q1 10
    2017 A Q2 12
    2017 A Q3 9
    2018 B Q4 1
    2017 B Q1 10

    Merci pour vos idées, quelques lignes de codes en SQL, ou un lien vers un tuto existant...
    Je pense pas être le premier à récupérer des données présentées dans des "jolis" tableaux excel...

    Si vous pensez que le Pb n'a pas de solution hormis un code qui écrit la requête n'hésitez pas à le dire

  2. #2
    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 803
    Points
    30 803
    Par défaut
    Ton SGBD propose peut-être l'opérateur UNPIVOT (tu n'as pas précisé celui que tu utilisais)...

    Sinon il ne reste en effet que la solution de n union.
    La requête peut certainement être construite dynamiquement en s'appuyant sur le dictionnaire du SGBD. Cela demande un peu de programmation mais ce n'est à faire qu'une seule fois.
    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.

  3. #3
    Membre habitué Avatar de francis60
    Homme Profil pro
    Modélisation coût/process
    Inscrit en
    Août 2011
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Modélisation coût/process
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 178
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Ton SGBD propose peut-être l'opérateur UNPIVOT (tu n'as pas précisé celui que tu utilisais)...
    Je ne dispose pas véritable SGBD, j'utilise une référence à Microsoft ActiveX Data Objects 6.1 Library avec VBA/Excel

    Merci, je me renseigne du côté de UNPIVOT le nom semble prometteur...
    Je vous dirai si ça marche

  4. #4
    Membre habitué Avatar de francis60
    Homme Profil pro
    Modélisation coût/process
    Inscrit en
    Août 2011
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Modélisation coût/process
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 178
    Points : 162
    Points
    162
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT [Year], [Project], [Region], Mois, Orders 
    FROM ( 
           SELECT [Year], [Project], [Region], [JAN], [FEB], [MAR], [APR], [MAY], [JUN], [JUL], [AUG], [SEP], [OCT], [NOV], [DEC] FROM [Volume$C1:Q19] 
     
            ) p 
    UNPIVOT    ( Orders FOR Mois IN ( [JAN], [FEB], [MAR], [APR], [MAY], [JUN], [JUL], [AUG], [SEP], [OCT], [NOV], [DEC] ) )
    J'ai testé ça mais apparemment ça ne marche pas: erreur dans la clause FROM ?

  5. #5
    Membre habitué Avatar de francis60
    Homme Profil pro
    Modélisation coût/process
    Inscrit en
    Août 2011
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Modélisation coût/process
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 178
    Points : 162
    Points
    162
    Par défaut
    S'il n'y a pas d'erreur dans ma syntaxe on peux déduire que mon SGBD ne propose pas UNPIVOT, je vais me renseigner côté forum VBA.

    Merci encore a al1_24 pour la résolution

    Francis

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

Discussions similaires

  1. [V 6.5.1] Produit cartésien
    Par pc75 dans le forum Deski
    Réponses: 7
    Dernier message: 10/07/2007, 10h17
  2. [z/OS] Mettre à plat sous MVS un fichier XML
    Par desbrandesq dans le forum Cobol
    Réponses: 4
    Dernier message: 16/11/2006, 22h22
  3. Réponses: 10
    Dernier message: 12/07/2006, 13h00
  4. Jointures : "Mettre à plat" un résultat
    Par fred64 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/05/2006, 19h37
  5. [Rave Report] Comment mettre à jour le produit
    Par Leesox dans le forum Rave
    Réponses: 2
    Dernier message: 11/04/2005, 21h00

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