首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server CASE语句的条件结果

SQL Server CASE语句的条件结果
EN

Stack Overflow用户
提问于 2012-07-18 21:46:45
回答 3查看 2.9K关注 0票数 1

是否可以在SQL Server case语句中的case-expression的when-expression中执行布尔比较。我有一个SELECT语句,它的逻辑类似于以下内容:

代码语言:javascript
复制
SELECT T1.ProductNumber,
    CASE
        WHEN (SELECT SUM(T2.Quantity) FROM Table2 AS T2 WHERE T2.Product=T1.Product) IS NULL
            THEN T1.Quantity
        WHEN (SELECT SUM(T2.Quantity) FROM Table2 AS T2 WHERE T2.Product=T1.Product) > T1.Quantity
            THEN T1.Quantity
        ELSE T1.Quantity - (SELECT SUM(T2.Quantity) FROM Table2 AS T2 WHERE T2.Product=T1.Product)
    END
FROM Table1 AS T1

这似乎在Table2上有很多重复的查找。如果可能的话,我想做这样的事情:

代码语言:javascript
复制
SELECT T1.ProductNumber,
    CASE (SELECT SUM(T2.Quantity) FROM Table2 AS T2 WHERE T2.Product=T1.Product) as altQty
        WHEN altQty IS NULL
            THEN T1.Quantity
        WHEN altQty > T1.Quantity
            THEN T1.Quantity
        ELSE T1.Quantity - altQty
    END
FROM Table1 AS T1
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-18 21:50:18

您不能以这种方式引用别名,但如果您将其放入子查询/派生表中,则可以这样做。

代码语言:javascript
复制
SELECT ProductNumber, CASE WHEN altQty IS NULL
            THEN Quantity
        WHEN altQty > Quantity
            THEN Quantity
        ELSE Quantity - altQty END
FROM 
(
  SELECT T1.ProductNumber, T1.Quantity, 
    altQty = (SELECT SUM(T2.Quantity) FROM Table2 AS T2 WHERE T2.Product=T1.Product)
  FROM Table1 AS T1
) AS x;
票数 4
EN

Stack Overflow用户

发布于 2012-07-18 21:52:07

代码语言:javascript
复制
SELECT T1.ProductNumber,
    CASE 
        WHEN T2.Qty IS NULL
            THEN T1.Quantity
        WHEN T2.Qty > T1.Quantity
            THEN T1.Quantity
        ELSE T1.Quantity - T2.Qty END
FROM Table1 AS T1
    LEFT JOIN (SELECT ProductNumber, SUM(Quantity) AS Qty FROM Table2 GROUP BY ProductNumber) AS T2
        ON T1.ProductNumber = T2.ProductNumber
票数 3
EN

Stack Overflow用户

发布于 2012-07-18 21:50:59

不能,但您可以删除重复的查找。

代码语言:javascript
复制
SELECT ProductNumber,
       CASE WHEN T2Quantity IS NULL THEN T1Quantity
            WHEN T2Quantity > T1Quantity THEN T1Quantity
            ELSE T1Quantity - T2Quantity END
  FROM
   (SELECT T1.ProductNumber, T1.Quantity as T1Quantity, SUM(T2.Quantity) as T2Quantity
      FROM Table1 AS T1 LEFT OUTER JOIN 
           Table2 AS T2 ON T2.Product=T1.Product
     GROUP BY T1.ProductNumber) innerTbl
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11542893

复制
相关文章

相似问题

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