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)
ありがとうございました!私はこれがこのケースではうまくいくと思います。私は後でクエリで、GroupCodeの値に基づいてselect句に必要なフィールドが複数ある場合が必要になると思います。この場合、これは機能しますか?つまり、GroupcodeがNULLの場合、TPが必要です。 ProductID、TP.ProductID2、TP.ProductID3。 –
おそらくここに行き、CASEの最初のバリエーションを見てください。必要なものとまったく同じように聞こえる:https://msdn.microsoft.com/en-us/library/ms181765.aspx – n8wrl