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 :

Condition sur 2 COUNT


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Par défaut Condition sur 2 COUNT
    Bonjour,

    Je voudrais savoir s'il est possible dans une requête comme celle ci-dessous de mettre une condition avec 2 count.

    Je voudrais par exemple afficher les établissements qui ont le même nombre d'étudiants dans les différentes villes définies.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    select a.nom_ville, a.nom_etablissement, a.nbeleve1
    from
    (select nom_ville, nom_etablissement, count(id_eleve) nbeleve1
    from ...
    where id_ville in (0,1,2)
    and annee = 2010
    group by nom_ville, nom_etablissement ) a
    full join
    (select nom_ville, nom_etablissement, count(id_eleve) nbeleve2
    from ...
    where id_ville in (3,4,5)
    and annee = 2010
    group by nom_ville, nom_etablissement ) b
    on a.nbeleve1 = b.nbeleve2
    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    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 : 22 001
    Billets dans le blog
    6
    Par défaut
    Par exemple comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    WITH T AS
    (
    SELECT nom_ville, nom_etablissement, count(id_eleve) nbeleve,
           CASE WHEN id_ville in (0, 1, 2) THEN 1 
                WHEN id_ville in (3, 4, 5) THEN 2
           END AS GROUPE_VILLE 
    FROM   T
    WHERE  id_ville in (0, 1, 2, 3, 4, 5)
      AND  annee = 2010
    GROUP  BY nom_ville, nom_etablissement, id_ville
    )
    SELECT *
    FROM   T AS T1
           JOIN T AS T2 ON T1.GROUPE_VILLE <> T2.GROUPE_VILLE
                           AND T1.nbeleve = T2.nbeleve;
    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/ * * * * *

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Par défaut
    Merci pour réponse et votre réactivité.

    Il y a une erreur au niveau du 2ème case.

    Expression de type non booléen spécifiée dans un contexte où une condition est attendue.

    Je vous mets cette 2ème requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    select count(distinct C.FID) AS C from
    (
    select distinct a.NUM, a.EID, a.FID, a.TP as TP1, b.TP as TP2, a.TVD as TVD1, b.TVD as TVD2
    from
    (select distinct 
    t6.ID as EID, t4.NUM, t1.ID, t1.SMI, t1.RVD, t2.TSI, t3.TP, t3.TVD, t2.FID
    from TABLE1 t1
    inner join TABLE2 t2 on t1.SMI = t2.ID
    inner join TABLE3 t3 on t1.RVD = t3.ID
    inner join TABLE4 t4 on t2.FID = t4.ID
    inner join TABLE5 t5 on t4.SSI = t5.ID
    left join TABLE6 t6 on t6.ID = t5.EID 
    where t2.TSI = 0
    ) a
    full join
    (select distinct 
    t6.ID as EID, t4.NUM, t1.ID, t1.SMI, t1.RVD, t2.TSI, t3.TP, t3.TVD, t2.FID
    from TABLE1 t1
    inner join TABLE2 t2 on t1.SMI = t2.ID
    inner join TABLE3 t3 on t1.RVD = t3.ID
    inner join TABLE4 t4 on t2.FID = t4.ID
    inner join TABLE5 t5 on t4.SSI = t5.ID
    left join TABLE6 t6 on t6.ID = t5.EID 
    where t2.TSI = 1
    ) b
    on a.EID = b.EID and a.FID = b.FID 
    where a.TP = b.TP and a.RVD <> b.RVD
     
    ) AS C WHERE C.EID = 1234
    je voudrais au niveau du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where a.TP = b.TP and a.RVD <> b.RVD
    ajouter une condition
    OR où le count distinct de a.TP <> count distinct b.TP.
    Merci

  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
    22 001
    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 : 22 001
    Billets dans le blog
    6
    Par défaut
    1) il n'y a pas de 2e CASE il n'y a qu'un seul CASE
    2) merci de respecter la charte de postage :
    https://www.developpez.net/forums/d9...vement-poster/

    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
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 617
    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 617
    Billets dans le blog
    10
    Par défaut
    Bonsoir,

    Vous faites un full outer join sur deux tables, puis vous posez une restriction where a.TP = b.TP and a.RVD <> b.RVD ce qui transforme votre jointure outer en jointure inner !

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonsoir,

    Vous faites un full outer join sur deux tables, puis vous posez une restriction where a.TP = b.TP and a.RVD <> b.RVD ce qui transforme votre jointure outer en jointure inner !
    Merci pour votre réponse mais comment ça sur 2 tables ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Par défaut
    Désolé c'est au niveau du second when.

    Est ce qu'il faut demander à supprimer la discussion car je ne peux pas vous fournir les vrais noms de mes tables et colonnes?


    Merci

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

Discussions similaires

  1. Condition sur un COUNT
    Par gastoncs dans le forum Requêtes
    Réponses: 16
    Dernier message: 21/06/2012, 22h22
  2. Condition sur le count
    Par phy4me dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/05/2009, 18h46
  3. [MySQL] Faire une condition sur un count()
    Par Him dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 15/05/2007, 19h26
  4. conditions sur 2 COUNT ?
    Par antoines dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/07/2006, 18h22
  5. condition sur count(*) dans mysql
    Par arizona_dream dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/09/2005, 09h06

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