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 :

Champ vide si 0


Sujet :

MS SQL Server

  1. #1
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut Champ vide si 0
    Comment mettre un champ à vide si celui-ci à la valeur 0 ?

    J'ai tenté avec un IF dans ma requête mais j'ai une erreur de syntaxe, de plus je ne sais pas s'il est possible d'utiliser un IF ELSE à l'intérieur d'un requête

    Voici ma 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
    SELECT 
    A.matric AS Matricule, 
    A.serid AS Equipe, 
    UPPER(C.prenom + '  ' + C.nom) AS 'Prénom Nom', 
    CONVERT(VARCHAR, '27-01-2010', 105) AS Date,
    D.absid AS Motif,
    E.libabs AS 'Libellé'
    IF (D.temps <> 0) 
    BEGIN
    LEFT(CAST(D.temps AS varchar), 1) + ':' +
           SUBSTRING(CAST(D.temps AS varchar), 2, LEN(D.temps)-1) AS 'Durée'
    END
    ELSE 
    BEGIN
    D.temps = NULL
    END
    FROM PERSVAR A
    JOIN PERS C ON A.matric = C.matric
    JOIN AP D ON A.matric = D.matric
    JOIN MA E ON D.absid = E.absid
    	WHERE A.dsitud = (SELECT MAX(dsitud)
    						FROM PERSVAR B
    						WHERE B.matric = A.matric)
    	AND '2010-01-27' BETWEEN D.dated AND D.datef
    	ORDER BY C.nom
    Voici l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Msg 156, Level 15, State 1, Line 10
    Incorrect syntax near the keyword 'LEFT'.
    Msg 102, Level 15, State 1, Line 15
    Incorrect syntax near 'D'.
    Msg 156, Level 15, State 1, Line 24
    Incorrect syntax near the keyword 'AND'.

  2. #2
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Bonjour,

    Utilisez l'instruction CASE à la place de IF.

    Bonne journée

  3. #3
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Bonjour,

    Utilisez l'instruction CASE à la place de IF.
    Avec CASE j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Msg 102, Level 15, State 1, Line 8
    Incorrect syntax near '<'.
    Msg 156, Level 15, State 1, Line 24
    Incorrect syntax near the keyword 'AND'.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par arthuro45 Voir le message
    Avec CASE j'ai cette erreur :
    Révisé votre syntaxe ! (F1)
    ou montrez nous ce que vous faites, on ne peut pas deviner !

  5. #5
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    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
     
    SELECT 
    A.matric AS Matricule, 
    A.serid AS Equipe, 
    UPPER(C.prenom + '  ' + C.nom) AS 'Prénom Nom', 
    CONVERT(VARCHAR, '27-01-2010', 105) AS Date,
    D.absid AS Motif,
    E.libabs AS 'Libellé',
    CASE 
         WHEN D.temps = 0 THEN NULL
         ELSE LEFT(CAST(D.temps AS varchar), 1) + ':' +
           SUBSTRING(CAST(D.temps AS varchar), 2, LEN(D.temps)-1) 
    END AS 'Durée'
    FROM PERSVAR A
    JOIN PERS C ON A.matric = C.matric
    JOIN AP D ON A.matric = D.matric
    JOIN MA E ON D.absid = E.absid
    	WHERE A.dsitud = (SELECT MAX(dsitud)
    						FROM PERSVAR B
    						WHERE B.matric = A.matric)
    	AND '2010-01-27' BETWEEN D.dated AND D.datef
    	ORDER BY C.nom
    Cependant, dans cette logique, si temps est NULL, il passera dans le ELSE.

    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
     
    SELECT 
    A.matric AS Matricule, 
    A.serid AS Equipe, 
    UPPER(C.prenom + '  ' + C.nom) AS 'Prénom Nom', 
    CONVERT(VARCHAR, '27-01-2010', 105) AS Date,
    D.absid AS Motif,
    E.libabs AS 'Libellé',
    CASE 
         WHEN ISNULL(D.temps,0) = 0 THEN NULL
         ELSE LEFT(CAST(D.temps AS varchar), 1) + ':' +
           SUBSTRING(CAST(D.temps AS varchar), 2, LEN(D.temps)-1) 
    END AS 'Durée'
    FROM PERSVAR A
    JOIN PERS C ON A.matric = C.matric
    JOIN AP D ON A.matric = D.matric
    JOIN MA E ON D.absid = E.absid
    	WHERE A.dsitud = (SELECT MAX(dsitud)
    						FROM PERSVAR B
    						WHERE B.matric = A.matric)
    	AND '2010-01-27' BETWEEN D.dated AND D.datef
    	ORDER BY C.nom
    Avec ce code, les NULL seront traités comme des 0.

  6. #6
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Révisé votre syntaxe ! (F1)
    Oui je débute et les problèmes de syntaxes sont très fréquents en ce moment, je pers un temps fou dessus.

    Merci pour votre aide à tous.

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

Discussions similaires

  1. [quick report]bandes des sous détail et champs vides
    Par Zatoobux dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/06/2004, 16h01
  2. Pb de tri avec champs vide
    Par nesbla dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2004, 17h42
  3. Test sur un champs vide
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 27/04/2004, 12h54
  4. [conception] champs vides ou plusieurs tables ?
    Par in dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 17/02/2004, 08h41
  5. tri avec les champs vides en dernier
    Par r-zo dans le forum Requêtes
    Réponses: 11
    Dernier message: 03/09/2003, 13h40

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