【问题标题】:Conditionally selecting variables in select statement在 select 语句中有条件地选择变量
【发布时间】: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


    【解决方案1】:

    你们很亲密!

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

    【讨论】:

    • 谢谢!我认为这将适用于这种情况。我认为稍后在查询中,我需要根据 GroupCode 的值在 select 子句中需要多个字段的情况。在那种情况下会起作用吗?也就是说,如果 Groupcode 为 NULL,我将需要 TP。产品ID、TP.ProductID2、TP.ProductID3。
    • 可能会 - 去这里看看 CASE 的第一个变体。听起来正是您所需要的:msdn.microsoft.com/en-us/library/ms181765.aspx
    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 2010-10-15
    • 1970-01-01
    • 2015-03-02
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多