根据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
部分。它不适用于外部连接。它必须是一个内部联接,以便来自所有表的记录都包含在联接中。