【发布时间】:2016-04-16 01:28:37
【问题描述】:
我正在尝试确定是否应该使用案例、子查询或其他内容来处理以下内容。
在 select 语句中,我想根据 @Z 的值选择变量 X 或变量 Y。
如果@Z 为NULL,则从#table 中选择@X。
如果@Z 不为空,请从#table 中选择@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)
【问题讨论】:
标签: sql-server case