首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >任何其他避免其他条件的方法

任何其他避免其他条件的方法
EN

Stack Overflow用户
提问于 2014-12-05 00:18:01
回答 3查看 49关注 0票数 0

我有下面的存储过程。我有变量@PercentCleared

IF @PercentCleared <= 70,那么我必须减去PercentCleared-10的其他用法。你能告诉我正确的方法吗?

代码语言:javascript
运行
复制
    DECLARE @PercentCleared INT
    DECLARE @TenPercent int

    SET @TenPercent = 10

    IF(@PercentCleared <=70)
    BEGIN
        SELECT 
            @I, dbo.tblV.VegTypeCode, dbo.tblV.VegTypeName 
        FROM 
            dbo.tblVegetationType 
        INNER JOIN 
            dbo.tblVegFormationLink ON dbo.tblV.VegTypeID = dbo.tblVegFormationLink.VegTypeID
        WHERE   
            dbo.tblVegetationType.PercentageCleared >=(@PercentCleared - @TenPercent)
        WHERE 
            a.VegTypeID = dbo.tblVegetationType.VegTypeID 
            AND dbo.tblVegetationType.VegTypeID <> (SELECT VegTypeID 
                                                    FROM @EcosystemCredits eco 
                                                    WHERE eco.theID = @I) 
    END
    ELSE IF
    BEGIN
        SELECT 
            @I, dbo.tblV.VegTypeCode, dbo.tblV.VegTypeName
        FROM 
            dbo.tblVegetationType 
        INNER JOIN 
            dbo.tblVegFormationLink ON dbo.tblV.VegTypeID = dbo.tblVegFormationLink.VegTypeID
        WHERE   
            dbo.tblVegetationType.PercentageCleared >=@PercentCleared
        WHERE 
            a.VegTypeID = dbo.tblVegetationType.VegTypeID 
            AND dbo.tblVegetationType.VegTypeID <> (SELECT VegTypeID 
                                                    FROM @EcosystemCredits eco WHERE eco.theID = @I) 

    End
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-05 00:30:24

我认为您可以通过在WHERE子句中使用CASE语句来做到这一点。

代码语言:javascript
运行
复制
SELECT @I,  dbo.tblV.VegTypeCode,  dbo.tblV.VegTypeName FROM dbo.tblVegetationType 
INNER JOIN dbo.tblVegFormationLink
  ON dbo.tblV.VegTypeID = dbo.tblVegFormationLink.VegTypeID
WHERE dbo.tblVegetationType.PercentageCleared 
      >= @PercentCleared 
         - CASE WHEN (@PercentCleared <=70) THEN @TenPercent ELSE 0 END -- change here
WHERE a.VegTypeID = dbo.tblVegetationType.VegTypeID 
AND dbo.tblVegetationType.VegTypeID 
    <> (SELECT VegTypeID FROM @EcosystemCredits eco WHERE eco.theID = @I) 
票数 2
EN

Stack Overflow用户

发布于 2014-12-05 00:33:22

您可以将逻辑放在where子句中。

代码语言:javascript
运行
复制
SELECT @I,  dbo.tblV.VegTypeCode, vt.VegTypeName
FROM dbo.tblVegetationType vt INNER JOIN
     dbo.tblVegFormationLink vfl
     ON vt.VegTypeID = vlt.VegTypeID
WHERE (vt.PercentageCleared >= @PercentCleared - (CASE WHEN @PercentCleared <= 70 THEN @TenPercent ELSE 0 END)) AND
      (vt.VegTypeID <> (SELECT VegTypeID FROM @EcosystemCredits eco WHERE eco.theID = @I) );

我使用表别名简化了查询。另外,您有两个where子句,第二个是多余的。

票数 2
EN

Stack Overflow用户

发布于 2014-12-05 04:57:50

您可以通过重写您的或IF语句来实现这一点,方法如下.

代码语言:javascript
运行
复制
WHERE   
    (@PercentCleared <=70 AND dbo.tblVegetationType.PercentageCleared >=(@PercentCleared - @TenPercent))
OR
    (@PercentCleared > 70 AND dbo.tblVegetationType.PercentageCleared >= @PercentCleared)

希望它不仅在这种情况下有帮助,而且在许多类似的场合也有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27306698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档