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

HyperFileSQL Discussion :

Différence entre 2 select


Sujet :

HyperFileSQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Différence entre 2 select
    Bonjour à tous

    je viens poster pour la première fois sur ce forum qui m'a déjà aidé un bon nombre de fois, j'espère que ça va encore être le cas

    Je travaille sous windev 17 avec une base Hyperfile SQL Classic.
    Sur cette base je désire réaliser une différence entre 2 select

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select ... From ...
    MINUS/EXCEPT
    Select a, b, c From ...
    Le problème est que sous ma base, je n'ai ni Minus, ni Except, ni Intersect (Vive Hyperfile...), on m'a parlé de Outer Join mais ne l'ayant jamais utilisé soit je m'y prend mal soit il ne marche pas car il ne me renvoie pas le résultat attendu.
    Voilà à quoi ça ressemblerait avec un Minus/Except

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT COUNT(DISTINCT p.IDPoste), SUM(p.NbMach), p.TypeP FROM Postes p 
    GROUP BY p.TypeP
    MINUS/EXCEPT
    SELECT COUNT(DISTINCT k.IDPoste) as nbp, SUM(k.NbMach) as nbm, k.TypeP FROM Postes k 
    GROUP BY p.TypeP
    HAVING nbm ... and nbp ...
    J'ai laissé des points de suspension après nbm et nbp car les paramètres qui suivent dépendent d'une application et correspondent soit à ">= val" soit "<= val" soit "BETWEEN val1 and val2"

    J'ai également essayé avec NOT IN, NOT EXISTS mais sans succès...

    J'espère avoir été clair dans l'énoncé de mon problème et que vous pourrez m'aider à trouver une solution
    Merci

    RH

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Est-ce que tu peux nous donner la requête complète, parce-que là c'est difficile de t'aider, vu qua ta requête ne risque pas re renvoyer quoi que ce soit, même avec une vrai base de données.
    En effet, tu te mélanges les pinceaux dans les alias, et de plus les deux parties de la requêtes sont identiques (au problème d'alias près), donc un EXCEPT ne renverra rien.

    Donc explique nous précisement ce que tu cherches, et on pourra t'aider.

    Tatayo.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour tatayo

    La requête est complète...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT COUNT(DISTINCT p.IDPoste), SUM(p.NbMach), p.TypeP FROM Postes p 
    GROUP BY p.TypeP
    MINUS/EXCEPT
    SELECT COUNT(DISTINCT k.IDPoste) AS nbp, SUM(k.NbMach) AS nbm, k.TypeP FROM Postes k 
    GROUP BY k.TypeP
    HAVING nbm >8 AND nbp <2
    La première requête est sensée me renvoyer toutes les lignes de ma table ce qu'elle fait, la seconde doit me renvoyer que les lignes dont le nbm est supérieur à 8 et le nbp inférieur à 2 ce qu'elle fait aussi

    Maintenant je veux afficher les résultats de la première requête qui ne sont pas dans la 2e et pour ça il me semblait qu'il suffisait de faire la 1ère Minus la 2e, erreur de ma part?

    RH

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Et en "retournant" ta requête : si tu retires >8 et <2, tu prends donc <= 8 ou >= 2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(DISTINCT k.IDPoste) AS nbp, SUM(k.NbMach) AS nbm, k.TypeP FROM Postes k 
    GROUP BY k.TypeP
    HAVING nbm <= 8 OR nbp >= 2
    Ca te donne quoi comme résultat ?
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Ta requête ne peux pas fonctionner: les deux requêtes de chaque côté du select son identiques !
    Je pense que tu voulais faire ceci:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT COUNT(DISTINCT p.IDPoste), SUM(p.NbMach), p.TypeP FROM Postes p 
    GROUP BY p.TypeP
    having COUNT(DISTINCT p.IDPoste) < 2
    MINUS/EXCEPT
    SELECT COUNT(DISTINCT k.IDPoste) AS nbp, SUM(k.NbMach) AS nbm, k.TypeP FROM Postes k 
    GROUP BY k.TypeP
    COUNT(DISTINCT k.IDPoste) > 8
    En relisant la requête, j'en déduis que tu veux ceci:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT COUNT(DISTINCT p.IDPoste), SUM(p.NbMach), p.TypeP FROM Postes p 
    GROUP BY p.TypeP
    having COUNT(DISTINCT p.IDPoste) < 2

    En effet, tu cherches les postes dont le nombre est < 2 moins ceux dont le nombre est > 8...

    Tatayo.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    J'y avais pensé frenchsting, mais avec un AND à la place du OR, et ça ne marchait pas, mais avec le OR ça marche nettement mieux...

    Je me sens sacrément con là...
    Merci beaucoup

    tatayo je cherche le nom des postes dont le nombre de poste(Count (Distinct IDPoste) est < 2 et le nombre de machines (Sum(NBMach)) est > 8

    RH

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Autant pour moi, je m'étais mélangé les pinceaux enxtre les alias des tables et ceux des colonnes...

    Tatayo.

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Pas de souci, merci d'avoir penché sur mon problème

    RH

  9. #9
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Citation Envoyé par Moucheron Voir le message
    J'y avais pensé frenchsting, mais avec un AND à la place du OR, et ça ne marchait pas, mais avec le OR ça marche nettement mieux...

    Je me sens sacrément con là...
    Merci beaucoup

    tatayo je cherche le nom des postes dont le nombre de poste(Count (Distinct IDPoste) est < 2 et le nombre de machines (Sum(NBMach)) est > 8

    RH
    En fait c'est de l'algébre booléen : le contaire de c'est Tant mieux si tu t'en es sorti.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/06/2010, 23h20
  2. PL/SQL différence entre deux dates et select into
    Par athone666 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 01/07/2009, 10h38
  3. [VBA pour Excel] Différence entre activate et select
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/10/2008, 17h20
  4. Différence entre un select max et un select top 1
    Par Delphi-ne dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/06/2008, 09h05
  5. Réponses: 7
    Dernier message: 27/02/2008, 13h55

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