0

次のようなクエリがあります。

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の値に応じて2つの変数を設定することです

これが疑似コードです:

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) 

私はいつでも以下を行うことができましたが、パフォーマンス上の理由から同じテーブルに2回参加する必要がないことを望んでいました

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) 

どんな提案も役に立ちます。

4

1 に答える 1

3

あなたはとても近くにいました、これはうまくいきません:

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);
于 2012-06-28T21:12:03.553 に答える