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 :

Problème avec case when


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kodo
    Profil pro
    Chef de projet technique
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet technique

    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Par défaut Problème avec case when
    Bonjour
    La requête ci dessus me semble correcte, pourtant, elle ne s'exécute pas, j'ai l'erreur suivante :
    Nom de colonne non valide : date3.
    requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT     s.id, s.date1, s.duree, CASE WHEN t.date2 IS NOT NULL 
                          THEN t.date2 ELSE s.date1 END AS date3
    FROM         Table1 AS s INNER JOIN
                          Table2 AS p ON s.pid = p.id INNER JOIN
                          Table3 AS t ON s.id = t.id
    WHERE     (p.code = 'A') AND (DATEDIFF(d, date3, GETDATE()) / 365 >= 0) AND (DATEDIFF(d, date3, GETDATE()) / 365 <= 5)
    pouvez vous me dire ce qu'il manque ?
    j'essaie d'éviter de passer par un union

    Merci.

  2. #2
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Essaye ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT * FROM
    (
    SELECT     s.id, s.date1, s.duree, CASE 
                        WHEN t.date2 IS NOT NULL THEN  DATEDIFF(d, t.date2, GETDATE()) / 365  
                        ELSE DATEDIFF(d, s.date1, GETDATE()) / 365 
                        END AS date3
    FROM         Table1 AS s INNER JOIN
                          Table2 AS p ON s.pid = p.id INNER JOIN
                          Table3 AS t ON s.id = t.id
    WHERE     (p.code = 'A')
    ) TMP
    WHERE  (DATEDIFF(d, date3, GETDATE()) / 365 >= 0) AND (DATEDIFF(d, date3, GETDATE()) / 365 <= 5)
    Etienne ZINZINDOHOUE
    Billets-Articles

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 002
    Billets dans le blog
    6
    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
    SELECT s.id, s.date1, s.duree, 
           CASE 
              WHEN t.date2 IS NOT NULL 
                 THEN t.date2 
              ELSE s.date1 
           END AS date3
    FROM   Table1 AS s 
           INNER JOIN Table2 AS p 
                 ON s.pid = p.id 
           INNER JOIN Table3 AS t 
                 ON s.id = t.id
    WHERE  p.code = 'A'
      AND  DATEDIFF(d, date3, GETDATE()) / 365 >= 0
      AND  DATEDIFF(d, date3, GETDATE()) / 365 <= 5
    Il n'y a aucune raison, sauf la chose entre les deux oreilles... Êtes vous sur d'avoir une colonne Date3 dans t (table3) ?

    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/ * * * * *

  4. #4
    Membre éclairé Avatar de kodo
    Profil pro
    Chef de projet technique
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet technique

    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Par défaut
    Bonjour,
    Merci pour les réponses, je n'ai aucune colonne nommée date3 dans la table Table3.
    Le nom 'date3' c'est juste un alias pour le résultat de :
    CASE
    WHEN t.date2 IS NOT NULL
    THEN t.date2
    ELSE s.date1
    END AS date3
    Merci

  5. #5
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    as-tu testé les requêtes proposées ?
    Etienne ZINZINDOHOUE
    Billets-Articles

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT s.id, s.date1, s.duree, 
    	CASE WHEN t.date2 IS NOT NULL THEN t.date2 ELSE s.date1 END AS date3
    FROM Table1 AS s 
    INNER JOIN Table2 AS p 
    	ON s.pid = p.id 
    INNER JOIN Table3 AS t 
    	ON s.id = t.id
    WHERE p.code = 'A' 
    	AND DATEDIFF(YEAR, CASE WHEN t.date2 IS NOT NULL THEN t.date2 ELSE s.date1 END, GETDATE()) >= 0 -- pas un peu bizarre cette clause ?!
    	AND DATEDIFF(YEAR, CASE WHEN t.date2 IS NOT NULL THEN t.date2 ELSE s.date1 END, GETDATE()) <= 5
    Dernière modification par Invité ; 20/12/2011 à 15h48.

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

Discussions similaires

  1. Problème de syntaxe avec CASE WHEN
    Par Lord_Chesseling dans le forum Langage SQL
    Réponses: 17
    Dernier message: 26/01/2015, 21h08
  2. problème avec CASE
    Par PAYASS59 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/11/2006, 13h08
  3. [PL SQL] Problème avec 'case' dans une fonction
    Par divail dans le forum Oracle
    Réponses: 14
    Dernier message: 13/03/2006, 15h50
  4. Pb avec case when !
    Par Brice Yao dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/08/2005, 08h20
  5. [XSL]problème avec <xsl:when>
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 27/05/2005, 16h54

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