Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2011, 11h20   #1
Nouveau Membre du Club
 
Avatar de kodo
 
Inscription : mars 2006
Messages : 203
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 203
Points : 25
Points : 25
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 :
Citation:
Nom de colonne non valide : date3.
requete :
Code :
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.
kodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 12h11   #2
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
Essaye ceci

Code :
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
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 12h22   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Code :
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 15h26   #4
Nouveau Membre du Club
 
Avatar de kodo
 
Inscription : mars 2006
Messages : 203
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 203
Points : 25
Points : 25
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 :
Citation:
CASE
WHEN t.date2 IS NOT NULL
THEN t.date2
ELSE s.date1
END AS date3
Merci
kodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 15h31   #5
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
as-tu testé les requêtes proposées ?
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 15h35   #6
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
Code :
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
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h28.


 
 
 
 
Partenaires

Hébergement Web