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

MS SQL Server Discussion :

sql server having


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 745
    Par défaut sql server having
    Bonjour,

    J'ai une table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Ma_Table
    email, annonce_id, promo.
    J'aimerais connaitre tous les emails qui ont moins de 5 promos.

    je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) as PROMO,email FROM ma_table where (promo = 1) GROUP BY email HAVING COUNT(*) < 5
    Mais cela ne me renvoie que celles qui ont des promos de moins de 5, mais au moins une, or j'aimerais aussi ceux qui ont 0 promos.


    Merci de votre aide!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    Vu ta requête tu dois toujours avoir la promo1
    Est-ce normal ?Je crois que tu devrais nous expliquer ton modèle de données.
    Et un exemple de données, et de ce que tu veux obtenir
    A+
    Soazig

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 745
    Par défaut
    je dois envoyer des emails avec dans mes emails au début du mail mes promos, je dois au moins en envoyer 5.

    Dans ma table le champs promo peut avoir (2, 1 ou 0) pour me signifier l'ordre (grosse promo, petite promo ou pas promo)

    Il y a des mails qui ont des articles sans aucune promo. Moi je voudrais connaitre les emails qui ont moins de 5 promos en incluant ceux qui n'ont aucune promo.

    Donc ce que j'avais fait c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COUNT(*) AS PROMO,email FROM ma_table WHERE (promo = 1 or promo = 2) GROUP BY email HAVING COUNT(*) < 5
    Qui me donne les emails avec moins de 5 promos MAIS pas ceux qui n'ont aucune promo OR j'aimerai non seuleument ceux qui ont moins de 5 promos mais en même temps ceux qui n'en n'ont aucune.

    Voila!

    Merci d'avance.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UNION ALL
    SELECT 0, email
    FROM  MaTable
    WHERE ....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 745
    Par défaut
    merci

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 745
    Par défaut
    Oui ce n'est pas ça que je veux faire cela revient au même que le count(*)!

    Or ce n'est pas ça!

    J'aimerais les emails avec moins de 5 promos ET les emails sans aucune promo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) AS PROMO,email FROM ma_table WHERE (promo = 1 OR promo = 2) GROUP BY email HAVING COUNT(*) < 5
    Cette requete me renvoie bien les emails qui ont moins de 5 promos mais ils ont au moins une promo!

    J'aimerai avec les emails qui n'ont aucune promo

  7. #7
    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
    Ou juste en supprimant le where ?

  8. #8
    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 : 43
    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,

    C'est normal puisque COUNT(*) compte le nombre de lignes d'occurrences, pas le nombre de valeurs.
    D'ailleurs si vous exécutez SELECT COUNT(*) seul, vous obtiendrez 1 : une seule ligne a été affectée.

    Il vous faut donc écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT email, COUNT(promo)
    FROM dbo.ma_table
    GROUP BY email
    N'oubliez pas de qualifier le noms des objets que vous spécifiez (tables, vues, procédures stockées et fonctions)

    @++

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

Discussions similaires

  1. Pb migration Access / SQL server
    Par yoyo dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 25/04/2005, 10h39
  2. Quel outil choisir pour un développement SQL-Server ?
    Par Mouse dans le forum Débats sur le développement - Le Best Of
    Réponses: 23
    Dernier message: 12/08/2003, 06h23
  3. [Kylix] sql server & kylix
    Par fehmitn dans le forum EDI
    Réponses: 1
    Dernier message: 23/08/2002, 19h44
  4. Backup BD SQL Server
    Par Ethmane dans le forum Administration
    Réponses: 3
    Dernier message: 07/06/2002, 00h42

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