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 :

Condition dans un where ou having


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Homme Profil pro
    Responsable BI
    Inscrit en
    Mars 2015
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable BI
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2015
    Messages : 62
    Par défaut Condition dans un where ou having
    Bonjour,

    Je butte sur une requête tiré d'une vue ou je regroupe et somme les colonnes pour arriver aux motifs de mes manquants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT     SUM(YTMANQ1) AS YTMANQ1, SNPosition, SNVerkauf, TYP, YNAME3, MANDKENN
    FROM         dbo.manquantvente_1
    GROUP BY SNPosition, SNVerkauf, TYP, YNAME3, MANDKENN
      HAVING SNPosition= '(5697330,3,0)'
    Le having n'est là que pour un exemple. Ca me donne ce résultat :

    YTMANQ1 SNPosition SNVerkauf TYP YNAME3 MANDKENN
    0.00000 (5697330,3,0) (5697325,3,0) Auftrag NULL 29
    10.00000 (5697330,3,0) (5697325,3,0) Auftrag Non livré 29

    A la base, je peux avoir 4 types de motifs de manquants (par article dans mes commandes) et donc dans ma vue je sélectionne les 4 types avant de les regrouper. Seulement, voilà, lorsque j'ai un manquant renseigné (comme là non livré) et que les autres lignes ne sont pas renseignés (à null), je souhaiterais les exclure.

    J'ai pensé à un Having avec Count(*)>1 mais je n'arrive pas à faire ce que je veux. La solution doit être certainement évidente...

    Merci,

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Désolé mais ce n'est pas très clair pour moi, pouvez vous communiquer un extrait de votre jeu de données et un exemple de résultat attendu.
    Indiquez aussi ce que sont les colonnes, leur nom n'est pas explicite, par exemple, quelle est la colonne "ARTICLE" que vous mentionnez ?
    Précisez aussi le SGBD que vous utilisez, la syntaxe SQL pouvant varier d'un SGBD à l'autre
    Quoi qu'il en soit, la clause HAVING a pour but de filtrer le résultat de votre groupage, or il semble ici que vous vouliez filtrer indépendamment du groupage, auquel cas il faut filtrer dans la clause WHERE

  3. #3
    Inactif  
    Homme Profil pro
    Responsable BI
    Inscrit en
    Mars 2015
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable BI
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2015
    Messages : 62
    Par défaut
    En fait mon souci c'est qu'en gros, je veux ça comme condition :

    Si nombre de ligne renvoyé > 1 (en gros, quand on a au moins un manquant renseigné) et que le YNAME3 est Null, exclure cette ligne.

    Du coup, si aucun manquant n'est renseigné, je n'aurais qu'une seule ligne et donc pas d'exclusion et si plusieurs manquants sont renseignés, on vire juste les lignes à Null.

    Je sais pas trop si c'est plus clair. Et oui, Having n'est sans doute pas adapter, c'est plutôt dans un Where qu'il faut que je trouve comment inclure cette condition.

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    J'ai pas bien compris ta demande mais seulement pour t'expliquer la différence entre where et having.
    Having peut être utilisé à la place de where. Mais on utilise having pour faire le filtre par rapport à des résultats de fonction ( souvent en utilisant un group by, mais qui n'est pas obligatoire).
    Dans ton script que tu as fournis, l'utilisation de Where et having sera le même. Par contre si tu veux faire une filtre par rapport à SUM(YTMANQ1) AS YTMANQ1, tu dois utiliser having.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT     SUM(YTMANQ1) AS YTMANQ1, SNPosition, SNVerkauf, TYP, YNAME3, MANDKENN
    FROM         dbo.manquantvente_1 WHERE SNPosition= '(5697330,3,0)'
    GROUP BY SNPosition, SNVerkauf, TYP, YNAME3, MANDKENN
      HAVING YTMANQ1 <= 10
    Attention, la clause where passe avant le group by mais le having après le group by.

    A+.

  5. #5
    Inactif  
    Homme Profil pro
    Responsable BI
    Inscrit en
    Mars 2015
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable BI
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2015
    Messages : 62
    Par défaut
    Je pensais pas que j'avais si mal expliqué, mais c'est vrai que sorti de son contexte, c'est un peu difficile à expliquer quand on est pas dedans...

    Je connais bien les différences entre Where et Having, mon souci c'est que je dois faire une condition dans mon Having/Where et que ça pour moi c'est plus compliqué.

    En gros, je veux exclure, les lignes où YNAME3 est à NULL mais dont le nombre de ligne renvoyé est supérieur à 1.

    Comme ça, si j'ai juste une ligne à vide (donc après regroupement), elle n'est pas exclu et si j'ai plusieurs YNAME3 renseignés (motif manquant de type Non Livré, Perdu, En cours de réapprovisionnement etc..), ils me gardent toutes ces lignes.

    Hum... je suis pas sur que ce soit plus clair :'(

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Essaie quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    having((count(distinct YNAME3) = 1 and YNAME3 is null) or (count(distinct YNAME3) > 1 and YNAME3 is not null) )
    A+.

  7. #7
    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
    Par défaut
    Bonjour

    Non, toujours pas clair

    Postez un jeu d'essai et le résultat attendu, ce sera surement plus clair !

Discussions similaires

  1. [MySQL] Conditions dans un WHERE
    Par laipreu dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/01/2012, 15h02
  2. Inclure une Condition dans un "Where"
    Par the dude dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/02/2011, 08h42
  3. Une condition dans le where
    Par logiciel_const dans le forum SQL
    Réponses: 2
    Dernier message: 31/01/2011, 18h47
  4. CONDITION dans un WHERE..NOT IN
    Par brasco06 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 08/09/2009, 08h53
  5. Condition dans un where ?
    Par devdev dans le forum Débuter
    Réponses: 7
    Dernier message: 28/08/2008, 12h05

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