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 :

WITH dans un sous select


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Par défaut WITH dans un sous select
    Bonjour,

    J'ai cherché partout sans résultat. J'ai une requête complexe que je resume dans mon exemple par select getdate().

    Le script suivant fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with toto as (select getdate() as mon_champ)	select * from toto
    mais je voudrais faire celui-là (qui ne fonctionne pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from
    (with toto as (select getdate() as mon_champ)	select * from toto) A
    En effet je souhaite que la requête commence par Select car mon programme appelant (BO Designer avec les tables dérivées) n'accepte que les requêtes commençant par SELECT. Mais avant de l'intégrer dans BO il faut déjà que ça marche de façon autonome dans l'éditeur de requête de SQL Server.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Par définition, le mot-clef WITH se place systématiquement avant le select :
    http://msdn.microsoft.com/en-us/library/ms175972.aspx
    A CTE must be followed by a single SELECT, INSERT, UPDATE, MERGE, or DELETE statement that references some or all the CTE columns[...]

  3. #3
    Expert confirmé
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Par défaut
    C'est le cas dans ma requête initiale: le with est en premier suivi d'un select. Je veux simplement pouvoir en faire une sous-requête comme c'est possible sous Oracle avec With.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ce n'est pas possible avec SQL Server.

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Vous pouvez remplacer l'expression de table commune par une sous requête dans la spécification d'une jointure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ...
    FROM ...
    JOIN
    (
    	SELECT ...
    ) ON ...
    @++

  6. #6
    Expert confirmé
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Par défaut
    Merci c'est ce que je vais faire mais que je voulais éviter.

    En effet comme j'utilise plusieurs fois les mêmes sous-requêtes, par union all notamment, j'aurais aimé ne les déclarer qu'une fois, cela améliore la lisibilité et sans doute très certainement la performance car je pense que le flux initial, correspondant à chacune des sous-requêtes, n'aurait été créé qu'une seule fois.

Discussions similaires

  1. [HQL] jointure implicite dans un sous-select
    Par Manopower dans le forum Hibernate
    Réponses: 1
    Dernier message: 09/09/2009, 11h45
  2. MSSQL2K: concatenation recursive dans un sous select
    Par mikaeru dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/01/2008, 11h00
  3. Selection de valeur de champs dans des sous formulaires
    Par Hydex dans le forum VBA Access
    Réponses: 5
    Dernier message: 05/06/2007, 15h17
  4. Sous-requête dans la clause Select
    Par Danger dans le forum WinDev
    Réponses: 2
    Dernier message: 24/05/2005, 17h33
  5. [firebird] sous select dans un select
    Par gdido dans le forum SQL
    Réponses: 2
    Dernier message: 14/05/2004, 09h57

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