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 :

CASE WHEN Résultat regroupé


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 192
    Points : 86
    Points
    86
    Par défaut CASE WHEN Résultat regroupé
    Bonjour,

    Débutant dans le domaine... Ma requête ci dessous fonctionne cependant cela ne me retourne qu'une seule ligne rempli de 1 , je souhaiterais une ligne par CASE faux.
    Par exemple si une érreur 10900 et (dd,WS.LastHWScan,GetDate()) > 5 sont trouvées j'aimerai une ligne pour chaques.
    Je ne sais pas si la disposition de mes CASE est correcte. J'ai enlevé le distinct, mais cela ne change rien, le group by me retourne un message d'érreur.

    Merci pour votre aide.

    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
    30
     
    SELECT DISTINCT sys.Name0,
    CASE WHEN sys.Resource_Domain_OR_Workgr0 =' ' THEN 1 END AS [Not In Domain],
    CASE WHEN CS.ClientActiveStatus='0' THEN 1 END AS [Client Active Status],
    CASE WHEN sys.client0 is  NULL THEN 1 END AS [Client Not Installed],
    CASE WHEN sys.Name0 IN (select sys.name0 from v_r_system sys group by  sys.name0 having count(sys.name0) >=2) then 1 END AS [En Doublon],
    CASE WHEN smsgs.MessageID = '669' THEN 1 END AS [Client Error 669],
    CASE WHEN smsgs.MessageID = '10900' THEN 1 END AS [Client Error 10900],
    CASE WHEN smsgs.MessageID = '10803' THEN 1 END AS [Client Error 10803],
    CASE WHEN smsgs.MessageID = '10601' THEN 1 END AS [Client Error 10601],
    CASE WHEN smsgs.MessageID = '10702' THEN 1 END AS [Client Error 10702],
    CASE WHEN smsgs.MessageID = '10805' THEN 1 END AS [Client Error 10805],
    CASE ER.Result
    WHEN 1 THEN 'Not yet evaluated' WHEN 2 THEN 'Not applicable' WHEN 3 THEN 'Evaluation failed'
    WHEN 4 THEN 'Evaluated, remediation failed' WHEN 5 THEN 'Not evaluated, dependency failed' 
    WHEN 6 THEN 'Evaluated, remediation succeeded' WHEN 7 THEN 'Evaluated,succeeded: All tests passed'
    ELSE 'Others'END AS[Client Health Description],
    CASE WHEN DATEDIFF(dd,WS.LastHWScan,GetDate()) > 5 THEN 1 END AS [HW Scan Date sup 5]
    FROM v_R_System sys 
    JOIN v_StatusMessage smsgs on sys.name0 = smsgs.MachineName
    JOIN v_CH_ClientSummary CS on sys.ResourceId=CS.ResourceID
    JOIN v_StatMsgWithInsStrings smwis on smsgs.RecordID = smwis.RecordID
    JOIN v_StatMsgModuleNames modNames on smsgs.ModuleName = modNames.ModuleName
    JOIN v_CH_EvalResults ER on sys.ResourceID = ER.ResourceID
    JOIN v_GS_WORKSTATION_STATUS WS on sys.ResourceID = WS.ResourceID
    WHERE smsgs.MessageID IN(669,10900,10803,10601,10702)
    AND DATEDIFF(dd,sys.Last_Logon_Timestamp0,getdate())<60
    AND sys.Name0 like '%' + @prmCoputerName + '%'
    AND DATEDIFF(dd,smsgs.Time,GetDate()) < 30
    ORDER BY Name0 ASC

  2. #2
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Si vous n'avez qu'une seule ligne, cela provient de votre clause where ou de vos jointures etant donnée que vous n'avez pas de clause d'agrégation.

    testez simplement la partie from + where pour voir ce que ca vous ramène et jouez sur les conditions pour obtenir le résultat attendu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT *
    FROM v_R_System sys 
    JOIN v_StatusMessage smsgs on sys.name0 = smsgs.MachineName
    JOIN v_CH_ClientSummary CS on sys.ResourceId=CS.ResourceID
    JOIN v_StatMsgWithInsStrings smwis on smsgs.RecordID = smwis.RecordID
    JOIN v_StatMsgModuleNames modNames on smsgs.ModuleName = modNames.ModuleName
    JOIN v_CH_EvalResults ER on sys.ResourceID = ER.ResourceID
    JOIN v_GS_WORKSTATION_STATUS WS on sys.ResourceID = WS.ResourceID
    WHERE smsgs.MessageID IN(669,10900,10803,10601,10702)
    AND DATEDIFF(dd,sys.Last_Logon_Timestamp0,getdate())<60
    AND sys.Name0 like '%' + @prmCoputerName + '%'
    AND DATEDIFF(dd,smsgs.Time,GetDate()) < 30

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 192
    Points : 86
    Points
    86
    Par défaut
    Merci, je vais voir de ce coté la.

Discussions similaires

  1. [11g] CASE WHEN / récupération d'un résultat de calcul
    Par laserator dans le forum SQL
    Réponses: 1
    Dernier message: 22/09/2014, 17h01
  2. case/when avec plusieurs valeurs pour le then
    Par Neo41 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2005, 16h58
  3. Pb avec case when !
    Par Brice Yao dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/08/2005, 09h20
  4. Structure CASE WHEN en Interbase
    Par tchaman dans le forum InterBase
    Réponses: 8
    Dernier message: 13/12/2004, 17h18
  5. [SQL] performances Decode ou Case when ?
    Par Yorglaa dans le forum Oracle
    Réponses: 8
    Dernier message: 01/10/2004, 16h50

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