Je ne sais pas si vous allez pouvoir m'aider, mais comme c'est toujours ici qu'on m'a le mieux répondu (et toujours en bon), autant essayer.
Pour information, je travaille sous SQL Server 2005 version Standard. Le but du calcul nommé, c'est d'avoir une colonne supplémentaire dans une table de fait nommée par exemple FAIT_Question, afin que celle-ci possède un élément agrégé plus rapidement calculé que lorsque l'on fait un membre calculé en MDX (du SQL multi dimensionnel) lorsque l'on parcourt le cube, sous excel par exemple.
La question est simple : faire des tests...
Premier test : ma valeur attendue est-elle vide ? (le NULL)
-> oui : NULL
-> non : Second test
Second Test : ma valeur attendue est-elle égale à 0 ?
-> oui : NULL
-> non : Dernier test
Dernier Test : ma valeur réelle est-elle vide ?
-> oui : NULL
-> non : réel / attendu
SELECT FAIT_Question,
IIF(
ISNULL([VALEUR_ATTENDUE]
,[DT-R8]),
NULL,
(IIF([VALEUR_ATTENDUE] == '0',
NULL ,
(IIF(
ISNULL(
[REEL],
[DT-R8]),
NULL,
[REEL]/[VALEUR_ATTENDUE])
)
))
)
AS C_TEST
FROM FAIT_Question AS FAIT_Question
Syntaxe générique :
SELECT <Table Name in Data Source>.* , <Expression> AS <Column Name> FROM <Table Name in Data Source> AS <Table Name in Data Source View>
Le IIF est la condition "IF then else" de forme IIF(condition,vrai,faux) que l'on retrouve aussi ailleurs en " condition ? vrai : faux" (sous SSIS par exemple)
L'erreur affichée par SQL Server est la suivante : "Syntaxe incorrecte vers '='."
Evidemment, j'ai testé au cas où du ='0', =0, ==0...mais non, rien n'y fait.
J'ai tenté de changer les IIF par des case sans succès
case when
ISNULL([VALEUR_ATTENDUE]
,[DT-R8]) then
NULL else
(case when [VALEUR_ATTENDUE] == '0' then
NULL else
(case when
ISNULL(
[REEL],
[DT-R8]) then
NULL else
[REEL]/[VALEUR_ATTENDUE]))
Au niveau comportemental, ce ne sera pas ce que je cherche puisqu'après le résultat que je veux est impossible à avoir par agrégat. (il faudrait un produit, or ce n'est pas faisable dans cette version)
Mais comme je n'aime pas rester sur un blocage...Et que ça pourra toujours servir un jour ou l'autre !
Si l'un de vous voit l'erreur, merci de la signaler
Je continue de chercher de mon côté. Je tomberai bien sur un projet où ça servira
Merci de m'avoir lu.
Dardadax