使用控制器的名称中选择查找表名

时间:2019-02-02 20:18:48

标签: sql sql-server tsql

我想根据ID值从User_IDCompanies表之一中提取ContractContorollerName值。

select P.TitleProject, P.StartDateProject, P.EndDateProject,P.ControllerID,P.RecordID,P.IsAllocated,P.ProjectStatus_ID,
CN.ControllerName,CN.PersianName,
PU.ProjectID,PU.UserID,PU.RoleID,
    CASE
        WHEN CN.ControllerName = 'Company' THEN 
            Companies.Id,Companies.[User_Id]
        WHEN CN.ControllerName = 'Contract' THEN 
            Contracts.Id,Contracts.[User_Id]
        END
from Projects P
    left outer join Controllers CN ON P.ControllerID = CN.Id
    left outer join ProjectUsers PU ON P.Id = PU.ProjectID
where P.IsAllocated = 1

例如,如果ContorollerName是'Company',则select命令如下:

select P.TitleProject, P.StartDateProject, P.EndDateProject,P.ControllerID,P.RecordID,P.IsAllocated,P.ProjectStatus_ID,
CN.ControllerName,CN.PersianName,
PU.ProjectID,PU.UserID,PU.RoleID,
Companies.Id,Companies.[User_Id]

1 个答案:

答案 0 :(得分:1)

您在正确的轨道上-使用left join。但是您需要使用适当的逻辑将表添加到from子句中。

联接的逻辑还不清楚。查询看起来像这样:

select . . .,
       coalesce(c.id, co.id) as id,
       coalesce(c.user_id, co.user_id) as user_id
from Projects P left join
     Controllers CN 
     on P.ControllerID = CN.Id left join
     ProjectUsers PU
     on P.Id = PU.ProjectID left join
     companies c
     on c.? = ? and   -- no idea what the right join conditions are
        c.ControllerName = 'Company' left join
     contracts co
     on co.? = ? and  -- no idea what the right join conditions are
        co.ControllerName = 'Contract' 
where P.IsAllocated = 1