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 :

[SQL] Insérer, au milieu d'une requête, un nombre de colonnes dépendant d'une variable


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 220
    Points : 177
    Points
    177
    Par défaut [SQL] Insérer, au milieu d'une requête, un nombre de colonnes dépendant d'une variable
    Bonjour Forum,

    J'aurais besoin de votre aide au sujet d'une requete que je suis en train de construire.

    Je récupère avec une query certains champs (15 au total) d'une même table.
    Les 2 premiers sont le numéro d'article et la date du samedi de la semaine actuelle. Les 13 derniers correspondent aux prévisions de ventes des 13 semaines à venir.

    Mes entêtes de colonnes dans excel sont fixent, Numéro d'article, Date du samedi de la semaine actuelle, puis les 52 semaines de l'année.

    Si j'exécute ma requête aujourd'hui, les 13 colonnes de prévisons de ventes vont être récupérées dans les colonnes C à O. Or, je souhaite les récupérer à partir de la colonne AB, puisque c'est celle qui correspond à la bonne semaine.

    Y a-t-il un moyen d'ajouter des colonnes au milieu d'une requête, le nombre de colonnes à ajouter dépendant de la date contenue dans un champ?

    Un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Code, DateSamedi, CASE (DateSamedi=20110702) THEN "Add 25 columns" END, VenteS01, VenteS02, VenteS03, VenteS04, VenteS05, VenteS06, VenteS07, VenteS08, VenteS09, VenteS10, VenteS11, VenteS12, VenteS13
    FROM maTable etc.
    Merci d'avance pour votre aide!!

    Mélanie

  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


    Non, une requête ne peut pas retourner un nombre variable de colonnes.
    Vous pouvez faire une requête qui sortira 54 colonnes (52 semaines plus les deux colonnes code et DateSamedi) et chaque ligne aura donc seulement 13 des 52 colonnes renseignées, les autres à NULL

    Mais cette requête sera très lourde.

    Il me parait beaucoup plus simple de laisser votre requête telle qu'elle est, de coller le résultat dans une feuille temporaire sous Excel, et dispatcher les résultats dans les bonnes cellules à l'aide des fonctions Excel de recherche dans les tableaux.

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 220
    Points : 177
    Points
    177
    Par défaut
    Bon, bah c'est bien ce que je pensais
    Décaler les colonnes manuellement après le rafraîchissement de la requête, c'est ce que je fais actuellement. J'vais finir par une macro pour me décaler le tout automatiquement.
    Merci beaucoup pour ce renseignement, j'me cassais la tête depuis des jours à essayer des tas de codes différents. Au moins maintenant je sais.
    Mélanie

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Tu peux faire un CASE de malade exhaustif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT Code, DateSamedi, CASE to_char(DateSamedi, 'ww') WHEN 01 THEN col02
                                                            WHEN 02 THEN col03
                                                            ...
                                                            END, 
                             CASE to_char(DateSamedi, 'ww') WHEN 01 THEN col03
                                                            WHEN 02 THEN col04
                                                            ...
                                                            END                                                           
    FROM maTable
    Ce qui te fait 13 colonnes semaines constituées d'un CASE à 52 WHEN chacun

    A noter que j'ai pris to_char(..., 'ww') pour extraire le numéro de semaine sous Oracle, il doit y avoir d'autres méthodes.

    (Ok, ça pue... désolé)

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/07/2011, 10h05
  2. comment insérer une valeur provenant d'un champs texte dans une requête SQL
    Par carlostropico dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 02/12/2009, 14h38
  3. Réponses: 0
    Dernier message: 16/12/2007, 20h02
  4. [HQL] Nombre de colonnes retourné par une requête
    Par Fr@ncky dans le forum Hibernate
    Réponses: 4
    Dernier message: 13/07/2007, 13h47

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