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 :

Requete avec "CASE" [2008]


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Requete avec "CASE"
    Bonjour,


    Dans une vue qui comporte 10 champs. Je voudrai recuperer 3 colonnes dont le deuxieme et la troisieme seraient conditionnees. Voici les 3 colonnes concernees.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SampledDate	         Value	       LIMSID
    2014-02-26 06:00:00	  0.5	       1889
    2014-02-27 06:00:00	  0.6	       1888
    2014-02-28 06:00:00	  >0.3         1887
    2014-03-01 06:00:00	  <0.7         1886
    2014-03-02 06:00:00	  0.9	       1885
    Avec Data type suivant:
    SampledDate atetime,
    Value: nvarchar(50)
    LIMSID: int

    Voici ce que je voudrai obtenir comme resultante de la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SampledDate	        Value 	      LIMSID
    2014-02-26 06:00:00	0.5	        1889
    2014-02-27 06:00:00	0.6	        1888
    2014-02-28 06:00:00	OverLimit	1887 ->0.3
    2014-03-01 06:00:00	UnderLimit	1886 - <0.7
    2014-03-02 06:00:00	0.9	        1885
    SGBD: SQL Server 2008.

    Merci d'avance,

    Desole pour les accents car j'ecris a partir d'un clavier anglais.

    Lele79

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 106
    Points : 28 394
    Points
    28 394
    Par défaut
    Qu'as-tu déjà essayé ?

  3. #3
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Pourquoi voulez-vous faire ça en SQL ?
    Comme il s'agit uniquement d'affichage, il serait plus adéquat de reléguer cette tache à l'application.

    Sinon, en SQL, ça donnerait quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT ...
      ,CASE 
          WHEN Value LIKE '<%' THEN 'UnderLimit'
          WHEN Value LIKE '>%' THEN 'OverLimit'
          ELSE Value
      END AS Value
     ,
     ...
    FROM ...
    Et quelque chose de similaire pour la colonne LIMSID qu'il faudra transtyper.

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Bonjour et merci pour votre réponse,

    Voici la requête que j’exécute mais ça me retour des erreurs!
    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
     
     
    SELECT SAMPLEDDATE ,
    	CASE VALUE 
    		When VALUE like '>%' then 'OverLimit'
    		When VALUE like'<%' then 'UnderLimit'
    		Else VALUE
    	End as PI_Value,
    	CASE LIMSID 
    		when Isnumeric(VALUE)=1 then LIMSID + ' - ' + Value
    		Else LIMSID
    	End as Annotation
     
    Message d'erreur:
    Msg 156, Level 15, State 1, Line 3
    Incorrect syntax near the keyword 'lIKE'.
     
    Mais également sur case LIMSID avec la fonction isnumeric
    On utilise un logiciel d’interfaçage de base pour récupérer des données en temps réelle entre deux bases. Grace a cette requête, on récupère les données qui nous intéresse.

    bien Cordialement,

    lele79

  5. #5
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par lele79 Voir le message
    mais ça me retour des erreurs!
    votre syntaxe du CASE est mauvaise. Regardez ma requête, vous avez mis un VALUE en trop.

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut [Resolu]
    Merci bien Aieeeuuuuu pour le coup de main.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT SAMPLEDDATE ,
    	CASE VALUE 
    		When VALUE LIKE '>%' then 'OverLimit'
    		When VALUE LIKE'<%' then 'UnderLimit'
    		Else VALUE
    	End AS PI_Value,
    	CASE LIMSID 
    		when Isnumeric(VALUE)=1 then Cast(LIMSID as nvarchar(20))
                     Else  Cast(LIMSID as nvarchar(20))+ 'OutOfLimit' + Value
    	End AS Annotation
    J'obtiens le résultat escompté.

    BIen cordialement,

    lele79

  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
    Points : 13 092
    Points
    13 092
    Par défaut
    heu... content que ça fonctionne, mais il me semble que vous avez posté le mauvais code...

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Oups....Tout à fait, bien vue:

    Voici le code finale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT SAMPLEDDATE ,
    	CASE 
    		When VALUE LIKE '>%' then 'OverLimit'
    		When VALUE LIKE'<%' then 'UnderLimit'
    		Else VALUE
    	End AS PI_Value,
    	CASE 
    		when Isnumeric(VALUE)=1 then Cast(LIMSID AS nvarchar(20))
                     Else  Cast(LIMSID AS nvarchar(20))+ ' OutOfLimit ' + Value
    	End AS Annotation
    Cordialement et merci encore une fois pour l'aide.

    Lele79

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

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