2016-04-15 8 views
0

私は、ケース、サブクエリなどを次のように使うべきかどうかを判断しようとしています。selectステートメントで変数を条件付きで選択する

select文では、@ Zの値に基づいて変数Xまたは変数Yのいずれかを選択します。

@ZがNULLの場合は、#テーブルから@Xを選択します。

@ZがNULLでない場合は、#テーブルから@Yを選択します。

私はうまくいくと思っていたコード例ですが、私はそれが正しいとは思いません。

特定コード:

case when @GroupCode is NULL 
    THEN TP.ProductID ELSE NULL END, 
    case when @GroupCode is not NULL 
    THEN TP.GroupCode ELSE NULL END, 

全コード

SELECT 
     T.TreatmentID, 
     T.SamplingRandomNumber, 
     T.Stage, 
     TreatmentOrdinal, 
     case when @GroupCode is NULL 
     THEN TP.ProductID ELSE NULL END, 
     case when @GroupCode is not NULL 
     THEN TP.GroupCode ELSE NULL END, 
     CASE WHEN E.GroupPricing = 1 THEN TP.GroupCode ELSE 0 END AS OptimizationGroupID, 
     @moneyZero AS Revenue, 
     TP.CalculatedFrom, 
     EG.Description, 
     E.GroupPricing, 
     TP.CurrencyCode 
     , 
     TIP.* 
    INTO #TreatmentDetails 
    FROM AnalyticsDW.Treatment T 
     INNER JOIN AnalyticsDW.TreatmentProduct TP ON T.TreatmentID = TP.TreatmentID 
     INNER JOIN AnalyticsDW.Product   P ON TP.ProductID = P.ProductID 
     LEFT JOIN #t TIP on TIP.TreatmentID2=T.TreatmentID 
     LEFT JOIN AnalyticsDW.ExperimentGroup EG ON TP.GroupCode = EG.ExperimentGroupCode 
     LEFT JOIN AnalyticsDW.Experiment   E ON TP.GroupCode = E.ExperimentGroupCode 
      AND P.ProviderCode   = E.ProviderCode 
      AND P.ProductCode   = E.ProductCode 
      AND P.ClientCode   = E.ClientCode 
      AND P.ProductVariationCode = E.ProductVariationCode 
    WHERE 
    T.LoggedUTC BETWEEN @fromDate AND @toDate 
    AND 
     T.Stage IN (0,1) 
    AND 
    --TP.TreatmentID=13 
    TP.TreatmentID BETWEEN @MinTreatmentID AND @MaxTreatmentID 
    AND P.ClientCode  = @ClientCode 
    AND (@provider   IS NULL OR P.ProviderCode   = @provider) 
    AND (@product   IS NULL OR P.ProductCode   = @product) 
    AND (@productVariation IS NULL OR P.ProductVariationCode = @productVariation) 
    AND (@GroupCode  IS NULL OR TP.GroupCode   = @GroupCode) 

答えて

1

あなたは非常に近いです!

case when @GroupCode is NULL 
    THEN TP.ProductID 
    ELSE TP.GroupCode 
END AS SomeFieldname 
+0

ありがとうございました!私はこれがこのケースではうまくいくと思います。私は後でクエリで、GroupCodeの値に基づいてselect句に必要なフィールドが複数ある場合が必要になると思います。この場合、これは機能しますか?つまり、GroupcodeがNULLの場合、TPが必要です。 ProductID、TP.ProductID2、TP.ProductID3。 –

+0

おそらくここに行き、CASEの最初のバリエーションを見てください。必要なものとまったく同じように聞こえる:https://msdn.microsoft.com/en-us/library/ms181765.aspx – n8wrl

関連する問題