Единственное, что я могу видеть неправильно, это то, как вы строите дело. Синтаксис для этого правильный без каких-либо примеров данных, которые я не могу на самом деле проверить.
declare @query varchar (250) set @query= (select EP.CleRepartition
from EQUIPE_PROJET EP where EP.Projet_Id=@PROJET_ID AND EP.Role_Id=3
and EP.CleRepartition Is not null )
SELECT U.USR_PRENOM ,U.USR_LOGIN,
case
when @RoleID=1 and @requete!= NULL then 100 - @requete
when EP.Role_Id=2 and @requete != NULL then 20
ELSE NULL END as CleRepartition FROM [EQUIPE_PROJET] EP INNER JOIN UTILISATEUR U ON U.USR_ID = [User_Id] INNER JOIN Ref_Role_Eq RE ON
RE.Role_Eq_Id = [Role_Id] END
EDIT:
Если вы пытаетесь создать случай и вернуть столбец на основе значений столбца, он будет выглядеть примерно так:
case when **columnFoo=1 then EP.CleRepartition**
when @RoleID=1 and @requete!= NULL then 100 - @requete
when EP.Role_Id=2 and @requete != NULL then 20
ELSE NULL END as CleRepartition
это вернет значение EP.CleRepartition, когда columnfoo было равно 1