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 :

Variable dans le FROM ou FROM composé , FROM ajustable


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 69
    Points : 34
    Points
    34
    Par défaut Variable dans le FROM ou FROM composé , FROM ajustable
    Bonjour à toutes et tous,

    J'ai svp besoin de votre aide pour résoudre un problème.
    J'ai une table avec les données de l'année en cours
    J'ai également une table avec les données de l'année précédente.

    Quand je prépare un fichier pour des collègues avec une requète sql embarquée qui donne par exemple le chiffre d'affaires de l'année en cours, j'ai un souci sur le mois de janvier.
    Les stats sont basculées le 5 janvier et les données actuelles passent en données antérieures.
    Cela à pour effet de produire des fichiers vides, car la requète pointe vers les données actuelles. (ça ce règle en février, forcément)

    Il faudrait que je puisse réalisé un from qui s'ajuste suivant une condition.
    J'ai exploré plusieurs pistes :

    1° la concaténation du nom de table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T1.Région, sum(T1.CA) 
    FROM STAT||(SELECT IF condition THEN ACTUEL ELSE ANTERIEUR FROM table condition) T1 
    GROUP BY T1.Région
    Mon espoir était de composer le nom suivant la condition

    2° Choix du nom complet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T1.Région, sum(T1.CA) 
    FROM (SELECT IF condition THEN STATACTUEL ELSE STATANTERIEUR FROM tablecondition) T1 
    GROUP BY T1.Région
    J'ai des erreurs de syntaxe que je ne trouve pas, ou une table qui n'est pas reconnu, cela dépend de la piste que j'explore.

    Sans s'attacher à la syntaxe, auriez-vous svp une idée de comment résoudre mon problème.

    Merci.

    Vincent

  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,

    Vous pouvez utiliser l'opérateur UNION pour regrouper vos données en une seule pseudo table sur laquelle vous allez pouvoir travailler

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT T1.Région, sum(T1.CA) 
    FROM (
        SELECT Region, CA
        FROM  STATACTUEL 
        WHERE condition 
        UNION ALL
        SELECT Region, CA
        FROM STATANTERIEUR 
        WHERE NOT condition 
    ) T1 
    GROUP BY T1.Région

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 69
    Points : 34
    Points
    34
    Par défaut
    Merci, j'ai testé et ça semble fonctionner comme il faut.
    J'utilise beaucoup de données et ce type de code risque d'être lourd à écrire car il les données sont répétés dans la requète principale et dans les 2 sous requètes.

    Si quelqu'un à une alternative, je suis preneur.

    Merci pour cette solution qui fonctionne.

    Vincent

  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
    Vous pouvez créer une vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE VIEW STAT_GLOBAL
    AS 
        SELECT Region, CA, AutresColonnes
        FROM  STATACTUEL 
        UNION ALL
        SELECT Region, CA, AutresColonnes
        FROM STATANTERIEUR
    et travailler à partir de cette vue.

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 083
    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 083
    Points : 30 840
    Points
    30 840
    Par défaut
    Si ton SGBD prend cette syntaxe en compte, tu peux utiliser les CTE (Expression de table commune) :
    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
    WITH  masource
    AS  (   SELECT  region       
                ,   ca           
            FROM    statactuel   
            WHERE   condition    
        UNION ALL                
            SELECT  region       
                ,   ca           
            FROM    statanterieur 
            WHERE NOT condition 
        ) 
    SELECT  t1.région
        ,   SUM(t1.ca) 
    FROM    masource    t1 
    GROUP BY t1.région
    Tu peux aussi utiliser une vue si l'expression de ta condition le permet.
    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.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 69
    Points : 34
    Points
    34
    Par défaut
    Merci pour vos réponses, je vais étudier tout ça.

Discussions similaires

  1. Réponses: 15
    Dernier message: 12/04/2011, 07h11
  2. procédure avec variable dans le from
    Par cedlensois dans le forum Développement
    Réponses: 2
    Dernier message: 24/03/2009, 09h50
  3. PLSQL: placer une variable dans une clause FROM
    Par Tiéry dans le forum PL/SQL
    Réponses: 6
    Dernier message: 02/03/2009, 15h43
  4. variable dans clause from
    Par LesDeuxZ dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 15/06/2007, 11h34
  5. Variable dans la clause from ?
    Par All Jinx dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/11/2006, 11h38

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