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 : si multiple = 0,5 si unique = 1


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2003
    Messages : 26
    Par défaut Condition : si multiple = 0,5 si unique = 1
    Bonjour,

    J'ai une table avec :
    date - Nom - Nbr Heure travaillée - type absence - nbre heure absences

    01/02/2016 - Mr X - 8 - Null - 0
    02/02/2016 - Mr X - 0 - CP - 7
    01/02/2016 - Mr Y - 5 - Null - 0
    01/02/2016 - Mr Y - 0 - CP - 3

    Je voudrai pouvoir obtenir le nombre de jour d'absence sachant que si
    - sur la même date heures travaillées >0 et heures absences >0 = 0,5 Jour
    - sur la même date heures travaillées <0 et heures absences >0 = 1 Jour
    - sur la même date heures travaillées >0 et heures absences <0 = 0 Jour

    Je n'arrive pas à mettre un count en condition avec un IF.

    Merci de votre aide

    Christophe

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

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 430
    Par défaut
    Bonjour,
    Je dirai que le plus simple est de faire une sous-requête qui calcule les sommes par client/date, ainsi dans la requête "principale" de simples CASE suffisent.

    Tatayo.

  3. #3
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2003
    Messages : 26
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Je dirai que le plus simple est de faire une sous-requête qui calcule les sommes par client/date, ainsi dans la requête "principale" de simples CASE suffisent.

    Tatayo.
    Peux-tu écrire un exemple ? Je ne suis pas assez pro pour comprendre comme cela...

    Merci

  4. #4
    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,

    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
    16
    17
    18
    19
    20
    21
     
    SELECT 
    		nom
    	,	SUM(NbJours)
    FROM	(
    	SELECT 
    			nom
    		, CASE
    			WHEN MAX(NbHeuresTrav) > 0 THEN 
    				CASE 
    					WHEN MAX(NbHeureAbs) > 0 THEN 0.5
    					ELSE 1 
    				END
    			ELSE 0
    			END AS NbJours
    	FROM	LaTable
    	GROUP BY 
    			nom
    		,	dte
    ) AS T
    GROUP BY nom

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Qu'est-ce qui empêche de faire le CASE à l'intérieur du SUM() ?

    Certes, d'un point de vue lisibilité c'est pas forcément ce qu'il y a de mieux, mais ça me semble plus "propre" que de passer par une sous-requête qui peut potentiellement envoyer l'optimiseur sur une mauvaise piste.

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 430
    Par défaut
    Parce que dans la question, le CASE porte justement sur le résultat du SUM().
    Dans l'exemple, pour Mr Y et pour le 01/02/2016, le nombre d'heure travaillées est de 5 et le nombre d'heures d'absence est de 3, mais ces deux valeurs sont dans deux lignes de la table.
    Il faut donc en premier calculer les sommes, et ensuite appliquer le CASE sur les résultats.
    Enfin c'est mon point de vue...

    Tatayo.

  7. #7
    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
    Le IF n'existe pas en SQL. Utilisez le CASE. A lire : http://sqlpro.developpez.com/cours/sqlaz/select/#L7
    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/ * * * * *

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

Discussions similaires

  1. condition logiques & multiples
    Par sulliwane dans le forum MATLAB
    Réponses: 2
    Dernier message: 24/12/2009, 13h23
  2. condition if multiple
    Par davelop dans le forum ASP
    Réponses: 4
    Dernier message: 30/09/2009, 09h42
  3. condition "OR" multiple
    Par nicerico dans le forum MySQL
    Réponses: 2
    Dernier message: 19/03/2009, 16h43
  4. classements multiples en 1 requete uniquement
    Par warpyou dans le forum Requêtes
    Réponses: 20
    Dernier message: 06/06/2006, 15h26
  5. Condition If multiple
    Par M1000 dans le forum ASP
    Réponses: 2
    Dernier message: 01/03/2004, 13h46

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