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

VB.NET Discussion :

Imbrication de requêtes


Sujet :

VB.NET

  1. #1
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut Imbrication de requêtes
    Bonjour,


    Dans un projet formé principalement d'une base de donnée, j'ai créé dans mon DataSet 2 requêtes :
    Requête 1 (R1)
    Requête 2 (R2)





    Je voudrais maintenant créer une 3ème requête R3 à partir des 2 premières.

    D'une part je ne parviens pas à utiliser R1 et R2 dans la SQL de ma requête R3 comme je le ferais sur Access (VS2010 Express me dit que R1 et R2 ne sont pas des tables... ce qui est vrai)
    et d'autre part, si je tente d'imbriquer dans ma SQL de R3 les syntaxes complètes SQL de R1 et R2 (avec des parenthèses au début et à la fin), l'IDE me dit qu'il ne sait pas gérer des SELECT de SELECT (ou quelque chose comme ça).

    Tout se passe comme si VS2010 Express ne savait pas gérer des requêtes de requêtes.

    Je dis VS2010 Express pour exposer mes constatations de manière factuelle mais à vrai dire je suis incapable de dire si c'est un pb d'IDE ou de langage VB.NET compte tenu de mon niveau

    Quelqu'un peut-il m'éclairer sur la méthode à suivre (je ne doute pas qu'il y en ait une...)

  2. #2
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Bonsoir,
    Je présume que vous voulez faire une jointure entre vos deux tables.
    Pour pouvoir faire ça, il faut qu'il y ai un champ identique dans les deux tables.
    Dans le schéma que vous avez mis en lien, le champ "Référence" semble être votre champ de jointure.
    Je vais prendre les valeurs suivantes pour écrire la requête :
    TVinsAchetés > Table R1
    >Référence
    >SomQAcheté
    TVinsConsommés > Table R2
    >Référence
    >SomQConsommés

    La requête R3 :
    SELECT TVinsAchetés.Référence, TvinAchetés.SomQAchetés, TVinsConsommés.SomQConsommés FROM TVinsAchetés INNER JOIN TVinsConsommés ON TVinsAchetés.Référence=TVinsConsommés.Référence

    Je vous conseille de lire le cours suivant dans lequel vous trouverez beaucoup d'informations.
    Bon dev.

  3. #3
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Re bonjur

    Le problème n'est pas tout à fait celui-là. Dans mon exemple, la copie d'écran montre les 2 requêtes qui sont
    R1 = Somme Quantité achetée
    R2 = Somme Quantité consommée
    La première est du type
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Select .., SUM(...) AS SommeDeQuantitéachetée FROM Vins achetés GROUP by Référence
    Idem pour la seconde avec la table Vins consommés
    où Vins achetés et Vins consommés sont les vraies tables de ma BdD

    R1 et R2 ont été créés suivant la méthode indiquée dans le topic :
    http://www.developpez.net/forums/d13...-datagridview/

    Lorsque j'essaye de créer R3 avec la même méthode, je coince comme indiqué dans mon poste précédent. L'IDE me dit que "la table [Somme Quantité achetée] n'existe pas".
    [Somme Quantité achetée] apparaît avant [Somme Quantité consommée] dans la SQL. C'est pourquoi il bloque dessus et stoppe tout. Sinon, j'imagine qu'il dirait la même chose pour R2

    Voici ma SQL exacte pour R3 mais je ne pense pas que sa syntaxe en cause :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [Référence vin].Référence, ([SommeDeQuantité achetée])-([SommeDeQuantité consommée]) AS [Quantité détenue]
    FROM ([Somme Quantité achetée] RIGHT JOIN [Référence vin] ON [Somme Quantité achetée].Référence = [Référence vin].Référence) LEFT JOIN [Somme Quantité consommée] ON [Référence vin].Référence = [Somme Quantité consommée].Référence
    GROUP BY [Référence vin].Référence, ([SommeDeQuantité achetée])-([SommeDeQuantité consommée]);

    NB : pour simplifier mon premier post, je n'ai pas dit que R3 est en fait fonction de R1, R2, et T1 où T1 est la table [Référence vin]

    J'ai cru un moment que le nom de mes requêtes R1 et R2 pouvait être en cause. J'ai donc essayé en les renommant sans espace et / ou sans accent mais rien n'y fait.

    Faut-il que je développe avec des copies d'écran le processus aboutissant au message d'erreur ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Bonjour,
    R1 et R2 ne sont pas des procédures stockées. On ne peut donc pas les appeler.
    Encore une fois, Somme Quantité Acheté et Somme Quantité Consommée ne sont pas des tables dans une base de données mais des DataTable dans un DataSet.
    A savoir qu'une requête se fait sur une table de base de données.
    (C'est pas tout à fait vrai, on peut faire des requête grâce à Linq)

    La requête R3 devrait ressembler à :

    SELECT TVinsAchetés.Référence, SUM(TVinsAchetés.Quantité) AS [Quantités achetées], SUM(TVinsConsomés.Quantité) AS [Quantités consommées] FROM TVinsAchetés INNER JOIN TVinsConsommés ON TVinsAchetés.Référence=TVinsConsommés.Référence GROUP BY TVinsAchetés.Référence

  5. #5
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Cette SQL ne correspond pas à ce que je cherche à faire.
    Dans mon post, tu remarqueras la soustraction [Vins acheté].[Quantité achetée]-[Vins consommés].[Quantité consommée] pour avoir un solde appelé [Quantité détenue] pour chaque référence de vin.
    Ainsi, si j'ai
    Table Vins Achetés
    Référence =1
    Quantité achetée =12


    Table Vins consommés
    Référence =1
    Quantité consommée = 3


    Ma R3 doit afficher
    Référence =1
    Quantité détenue = 9 (12-3)


    Ce qui me gêne le plus, c'est de ne pas pouvoir stocker mes requêtes intermédiaires R1 et R2 comme procédure stockée pour pouvoir les appeler. J'ai bien lu le lien que tu m'as indiqué à ce sujet mais je n'ai pas trouvé de solution concrète.

Discussions similaires

  1. Imbrication de requête
    Par steakos78 dans le forum VB.NET
    Réponses: 3
    Dernier message: 18/03/2011, 10h11
  2. Simplifier une imbrication de requêtes
    Par Sparktacus dans le forum Requêtes
    Réponses: 6
    Dernier message: 04/08/2010, 10h22
  3. Imbrication de requête
    Par Interface dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/09/2008, 12h42
  4. Imbrication de requêtes
    Par reeda dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 17/12/2007, 22h56
  5. Imbrication de requêtes
    Par Gabout dans le forum Access
    Réponses: 2
    Dernier message: 25/02/2007, 08h51

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