2011-06-30 50 views
0

我想從參數@Display獲取值0,1或2.當@Display = 0時,我想要顯示ec.IsEquipmentRelated爲true的所有項目。當@Display = 0時,我想顯示ec.IsEquipmentRelated爲false的所有項目,當@Display = 2時,我想顯示所有ec.IsEquipmentRelated爲真的項目 false。我如何在FROM部分實現這一點?SELECT FROM取決於SQL中的參數

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 ... 

回答

1

這應該工作:

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)) 
+1

我認爲將它放在外連接中不是一個好主意。 –

+0

爲什麼不在外連接? –

+0

看到兩者之間的性能比較會很有趣。不過,具體的問題是如何將它放在「FROM」部分。 – Narnian

1

做一個WHERE條款:

WHERE (@Display = 0 AND ec.IsEquipmentRelated = 'True') 
OR (@Display = 1 AND ec.IsEquipmentRelated = 'False') 
OR @Display = 2 
+0

這應該工作。 – Narnian