Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/06/2011, 17h39   #1
Membre habitué
 
Inscription : septembre 2007
Messages : 220
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : septembre 2007
Messages : 220
Points : 132
Points : 132
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 :
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
melouille56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 10h53   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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.
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 11h41   #3
Membre habitué
 
Inscription : septembre 2007
Messages : 220
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : septembre 2007
Messages : 220
Points : 132
Points : 132
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
melouille56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 13h11   #4
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

Tu peux faire un CASE de malade exhaustif :
Code :
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/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h44.


 
 
 
 
Partenaires

Hébergement Web