Bonjour,
J'ai un objet qui calcule l'âge en fonction de la date de naissance.
Le SQL de cet objet est défini sur le modèle "CASE WHEN ... THEN ... ELSE ... END".
Exemple :
Jusqu'ici, pas de problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT case when (datepart(day, PERSONNE.DANAIS)>datepart(day,getdate()) and datepart(month, PERSONNE.DANAIS)=datepart(month,getdate())) or (datepart(month, PERSONNE.DANAIS)>datepart(month,getdate())) then datediff(year, PERSONNE.DANAIS,getdate()) -1 else datediff(year, PERSONNE.DANAIS,getdate()) end FROM PERSONNE
Lorsque j'ajoute une condition sur un objet de type indicateur (somme), ça ne marche plus !
Exemple :
Erreur SQL obtenue :
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 SELECT case when (datepart(day, PERSONNE.DANAIS)>datepart(day,getdate()) and datepart(month, PERSONNE.DANAIS)=datepart(month,getdate())) or (datepart(month, PERSONNE.DANAIS)>datepart(month,getdate())) then datediff(year, PERSONNE.DANAIS,getdate()) -1 else datediff(year, PERSONNE.DANAIS,getdate()) end FROM PERSONNE GROUP BY case when (datepart(day, PERSONNE.DANAIS)>datepart(day,getdate()) and datepart(month, PERSONNE.DANAIS)=datepart(month,getdate())) or (datepart(month, PERSONNE.DANAIS)>datepart(month,getdate())) then datediff(year, PERSONNE.DANAIS,getdate()) -1 else datediff(year, PERSONNE.DANAIS,getdate()) end HAVING ( sum(PERSONNE.MPPROJ) != 0 )Le vrai code SQL devrait, je pense, être :[Microsoft][ODBC SQL Server Driver][SQL Server]Column PERSONNE.DANAIS' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.8120
Test effectué sous BO 5.1.6, le résultat est identique.
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 SELECT case when (datepart(day, PERSONNE.DANAIS)>datepart(day,getdate()) and datepart(month, PERSONNE.DANAIS)=datepart(month,getdate())) or (datepart(month, PERSONNE.DANAIS)>datepart(month,getdate())) then datediff(year, PERSONNE.DANAIS,getdate()) -1 else datediff(year, PERSONNE.DANAIS,getdate()) end FROM PERSONNE GROUP BY PERSONNE.DANAIS HAVING ( sum(PERSONNE.MPPROJ) != 0 )
Y a t-il un moyen de faire en sorte que BO génère un code correct ?
Partager