根据SQL中的参数从中选择

根据SQL中的参数从中选择,sql,tsql,stored-procedures,Sql,Tsql,Stored Procedures,我想从参数,@Display获取值0、1或2。当@Display=0时,我想显示所有ec.IsEquipmentRelated为true的项目。当@Display=0时,我想显示ec.IsEquipmentRelated为false的所有项目;当@Display=2时,我想显示ec.IsEquipmentRelated为true或false的所有项目。如何在FROM部分中实现这一点 ALTER PROCEDURE [dbo].[Downtime_GetNewCause_EquimentLocat

我想从参数,
@Display
获取值0、1或2。当@Display=0时,我想显示所有
ec.IsEquipmentRelated
为true的项目。当@Display=0时,我想显示
ec.IsEquipmentRelated
为false的所有项目;当@Display=2时,我想显示
ec.IsEquipmentRelated
为true或false的所有项目。如何在
FROM
部分中实现这一点

ALTER PROCEDURE [dbo].[Downtime_GetNewCause_EquimentLocation]
    @DisplayInactive bit = 0,
    @SortOrder INT = 0,
    @Diplay INT = 0
AS

-- Main Data source
SELECT    ic.IncidentCauseID
        , 'EquimentRelated' = COALESCE(ec.IsEquipmentRelated, 0)
        , ic.NewIncidentCauseID
        , ic.DisplayName 
        , ic.IsLegacy
        , el.EquipmentLocationID
        , el.ShopID
        , ec.EquipmentClassID
        , ec.EquipmentAbbr
        , el.ClassSequenceNumber
        , el.EquipmentComponent
        , el.CompSequenceNumber
        , ic.IsActive
FROM    Downtime_IncidentCauses ic
        LEFT JOIN Downtime_EquipmentLocations el ON ic.EquipmentLocationID = el.EquipmentLocationID
        LEFT JOIN Downtime_EquipmentClasses ec ON el.EquipmentClassID = ec.EquipmentClassID AND
            CASE WHEN @Diplay = 0 THEN ...
            CASE WHEN @Diplay = 1 THEN ...
            CASE WHEN @Diplay = 2 THEN ...

WHERE
子句中执行此操作:

WHERE (@Display = 0 AND ec.IsEquipmentRelated = 'True')
OR (@Display = 1 AND ec.IsEquipmentRelated = 'False')
OR @Display = 2
这应该起作用:

INNER JOIN Downtime_EquipmentClasses ec 
ON (el.EquipmentClassID = ec.EquipmentClassID)
    AND (  (@Display = 0 AND ec.IsEquipmentRelated = 1) 
        OR (@Display = 1 AND ec.IsEquipmentRelated = 0) 
        OR (@Display = 2) )

我认为把它放在外部连接中不是一个好主意。在两者之间进行性能比较会很有趣。但具体的问题是如何将其放在“FROM”部分。确切地说,
左连接位于
FROM
部分。它不适用于外部连接。它必须是一个内部联接,以便来自所有表的记录都包含在联接中。