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 :

Ré utiliser des champs calculés dans une requête


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 202
    Points : 43
    Points
    43
    Par défaut Ré utiliser des champs calculés dans une requête
    Hello,

    Je me pose une question au sujet des champs calculés dans une requête.

    J'aimerais faire quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select champ1, champ2, (select ....) as resultat_imbrique, champN from table;
    (select ....) est une requête imbriquée qui fourni un seul champ/enreg ou un calcul, count, moyenne ou sum. Jusque la rien de compliqué ça marche nickel.

    La ou c'est chaud c'est si je veux faire ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select champ1, champ2, (select ....) as resultat_imbrique, resultat_imbrique*2, champN from table;
    ou ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select champ1, champ2, (select ....) as resultat_imbrique, champN from table resultat_imbrique>10
    where
    Dans les deux derniers cas, impossible de réutiliser le résultat de la requete imbriquée pour un filtre ou un autre calcul.
    Du coup, je suis obligé de faire un copier coller du (select ....), ce qui a mon avis est loin d'être optimisé !

    Y a t il une solution plus propre ?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    passer au jointure !!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 202
    Points : 43
    Points
    43
    Par défaut
    En effet, je suis d'accord avec toi sur l'exemple que j'ai mis.

    Ceci dit, j'ai oublié de préciser une chose: la requête que je dois gérer est déjà monstrueuse, avec des jointures déjà présentes, des group by , etc.

    Donc il me faut une autre solution que la jointure...

    Merci quand même

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 202
    Points : 43
    Points
    43
    Par défaut
    Typiquement, je voudrais faire un calcul imbriqué, puis retourner le résultat de ce calcul, et retourner un champ qui vaut y si le résultat est positif et n si le résultat est négatif (avec un case).
    Dans un cas comme celui ci ça serait interessant de pouvoir récupérer le résultat du calcul pour tester le signe sans avoir à refaire le calcul...

  5. #5
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Tu peux englober ta requête avec un autre select pour pouvoir filtrer dessus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT champ1,
               champ2,
               Resultat_imbrique,
               CASE WHEN T.Resultat_imbrique>0 
                       THEN 'P' ELSE 'N'
                       END SIGNE_RESULTAT_IBRIQUE
    FROM(
               SELECT champ1, 
                          champ2,
                           Resultat_imbrique ,
                           champN 
       FROM TABLE
            ) AS T
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  6. #6
    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 boby62423 Voir le message
    Du coup, je suis obligé de faire un copier coller du (select ....), ce qui a mon avis est loin d'être optimisé !
    Qu'est-ce qui vous fait dire ça ?

    Citation Envoyé par boby62423 Voir le message
    Ceci dit, j'ai oublié de préciser une chose: la requête que je dois gérer est déjà monstrueuse, avec des jointures déjà présentes, des group by , etc.

    Donc il me faut une autre solution que la jointure...
    Surtout si vous dites ça !


    Sans la requête complète, difficile de s'avancer ("(SELECT ...)" n'est pas très explicite)
    Est-ce une requête corrélée ?

    Vous vouliez une solution, 7gyY9w1ZY6ySRgPeaefZ vous l'a proposée :

    passer au jointure !!
    Et je ne vois pas pourquoi cette solution ne va pas ? Pourquoi ne voulez-vous pas ajouter de jointure à une requête qui en a déjà plusieurs ?

  7. #7
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Par ce que ce n'est pas indenté
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

Discussions similaires

  1. [AC-2007] Champ calculé dans une requête
    Par Chris 81 dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 02/09/2011, 14h40
  2. Champs calculés dans une requête
    Par fmu74 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 03/12/2008, 15h29
  3. Insérer des champs vides dans une requête sql
    Par js8bleu dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/02/2008, 15h00
  4. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  5. Champ calculé dans une requête
    Par HUÏEZ Fabienne dans le forum Access
    Réponses: 3
    Dernier message: 08/12/2005, 12h31

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