2012-06-28 39 views
0

我有一個查詢,看起來像這樣:設置變量使用CASE表達式

SELECT LossCost, CoverageID     
FROM BGILossCost] 
WHERE CoverageID IN (1, 2) AND 
     StateID = @StateID AND 
     ConstructionID = @ConstructionID AND 
     PropertyClassCodeID = @PropertyClassCodeID AND 
     (BGIDistrictID = @BGIDistrictID OR BGIDistrictID IS NULL)   

,並返回下面的數據,這是正確的:

LossCost        CoverageID 
--------------------------------------- ----------- 
0.012         1 
0.034         2 

但我想要做的是設置兩個什麼取決於在CoverageID

這裏的值的變量是pseudeo代碼:

SELECT @Var1 = CASE CoverageID = 1 THEN LossCost END, 
    @Var2 = CASE CoverageID = 2 THEN LossCost END    
FROM BGILossCost] 
WHERE CoverageID IN (1, 2) AND 
     StateID = @StateID AND 
     ConstructionID = @ConstructionID AND 
     PropertyClassCodeID = @PropertyClassCodeID AND 
     (BGIDistrictID = @BGIDistrictID OR BGIDistrictID IS NULL) 

我總是可以做下面的,但我希望我也不會加入到同一個表兩次因爲性能原因

SELECT @Var1 = LossCost      
FROM BGILossCost] 
WHERE CoverageID = 1 AND 
     StateID = @StateID AND 
     ConstructionID = @ConstructionID AND 
     PropertyClassCodeID = @PropertyClassCodeID AND 
     (BGIDistrictID = @BGIDistrictID OR BGIDistrictID IS NULL) 

SELECT @Var2 = LossCost      
FROM BGILossCost] 
WHERE CoverageID = 2 AND 
     StateID = @StateID AND 
     ConstructionID = @ConstructionID AND 
     PropertyClassCodeID = @PropertyClassCodeID AND 
     (BGIDistrictID = @BGIDistrictID OR BGIDistrictID IS NULL) 

任何建議將是有益的。

回答

2

你是非常接近的,沒有這個工作:

SELECT 
    @Var1 = MAX(CASE WHEN CoverageID = 1 THEN LossCost END), 
    @Var2 = MAX(CASE WHEN CoverageID = 2 THEN LossCost END) 
FROM BGILossCost 
WHERE CoverageID IN (1, 2) AND 
     StateID = @StateID AND 
     ConstructionID = @ConstructionID AND 
     PropertyClassCodeID = @PropertyClassCodeID AND 
     (BGIDistrictID = @BGIDistrictID OR BGIDistrictID IS NULL); 
+0

我想這一點,它看起來像它的工作原理。但我不明白爲什麼。當我的頭更清晰時,首先需要看看它。感謝您的幫助 – Richard

+0

如果您不使用聚合,SQL Server將分配來自單個任意行的所有值(我不願意說「最後一行」以避免任何誤導性內涵)。由於任意行不能同時包含CoverageID = 1 *和* CoverageID = 2,因此讓該行指定賦值將始終導致其中一個變量保持爲NULL。 –

+0

好吧,現在我有機會審查它,我明白髮生了什麼。酷招。謝謝你的幫助。非常感激。 – Richard