Выбрать с делом - PullRequest
       1

Выбрать с делом

0 голосов
/ 10 июля 2019

Я пишу хранимую процедуру. У меня проблема с колонкой EP.Clerepartition. Я хочу выбрать этот столбец на основе случаев. Где мне нужно установить свой код?

Я попробовал этот код, и я получаю сообщение об ошибке, близкое к EP.CleRepartition

«Не удалось связать многоэлементный идентификатор»

Мой запрос верен или я могу сделать это по-другому?

@PROJET_ID int = NULL,  @RoleID int=NULL

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,       EP.CleRepartition=     case
EP.CleRepartition 
      when @RoleID=1 and @requete IS NOT NULL then 100 - @requete 
      when EP.Role_Id=2 and @requete IS NOT NULL then 20
      ELSE NULL      END   
 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] 
 WHERE (@PROJET_ID IS NULL OR @PROJET_ID = [Projet_Id]) AND EP.Deletion_Date IS NULL
 AND (@RoleID is NULL or [Role_Id] =@RoleID)

Я ожидаю, что выходное имя usr, логин usr, имя роли и cleRepartition.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Можете ли вы попробовать этот путь-

SELECT  U.USR_PRENOM ,U.USR_LOGIN,      
CleRepartition=      
CASE
     when @RoleID=1 and @requete IS NOT NULL then 100 - @requete 
     when EP.Role_Id=2 and @requete IS NOT NULL then 20
     ELSE NULL      
END   
FROM [EQUIPE_PROJET] EP   
INNER JOIN UTILISATEUR U ON  U.USR_ID = [User_Id] -- Please define this user id belongs to which table   
INNER JOIN Ref_Role_Eq RE ON RE.Role_Eq_Id = [Role_Id] 
0 голосов
/ 10 июля 2019

Единственное, что я могу видеть неправильно, это то, как вы строите дело. Синтаксис для этого правильный без каких-либо примеров данных, которые я не могу на самом деле проверить.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...