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)
任何建議將是有益的。
我想這一點,它看起來像它的工作原理。但我不明白爲什麼。當我的頭更清晰時,首先需要看看它。感謝您的幫助 – Richard
如果您不使用聚合,SQL Server將分配來自單個任意行的所有值(我不願意說「最後一行」以避免任何誤導性內涵)。由於任意行不能同時包含CoverageID = 1 *和* CoverageID = 2,因此讓該行指定賦值將始終導致其中一個變量保持爲NULL。 –
好吧,現在我有機會審查它,我明白髮生了什麼。酷招。謝謝你的幫助。非常感激。 – Richard