SQL - 在一个Case中计算两个字段

时间:2018-05-08 14:07:29

标签: mysql sql

我有一个sql查询,它按如下方式计算字段:

  Select 
         Case When b.xField > 10
         then 20
         when b.xField > 48
         then 10
         else 0
         end as field1
 from (Select CASE WHEN numberChosen < 15
              THEN 10
              WHEN numberChosen > 15
              THEN 48 
              END as xField
        From secondTable) B

我需要的是,当field1为10时,再做一些其他计算以保存在另一个字段上。

例如:

       then 20 AND field2 = yData - 26

所以当案例在20时,则有另一个字段等于yData - 26。 可以使用Sql中的Cases来实现吗?在一个案例中计算两个字段?

2 个答案:

答案 0 :(得分:0)

您可以使用在第二种情况下决定何时field1 = 10(即xField > 48)的基本逻辑:

SELECT CASE WHEN xField > 48
            THEN 10
            WHEN xField > 10
            THEN 20
            ELSE 0
       END as field1,
       CASE WHEN xField > 48
            THEN yData - 26
       END as field2
FROM (SELECT CASE WHEN numberChosen < 15
                  THEN 10
                  WHEN numberChosen > 15
                  THEN 48 
             END as xField,
             yData
      FROM secondTable) B

我更改了您的案例顺序,因为在> 10条件之前设置> 48条件永远不会让> 48被命中。

答案 1 :(得分:0)

  

我想在一个Case中计算两个字段

你不能这样做。

您可以在查询中放置两个case子句,如下所示:

 Select 
     Case When xField > 10
     then 20
     when xField > 48
     then 10
     else 0
     end as field1,
    Case When xField > 10
     then ydata - 26
     else 0
     end as field2

from myData

或者如果真的很难计算field2

,你可以在包装器查询中生成额外的字段值
SELECT field1, CASE WHEN field1 > 10 THEN ydata -20 ELSE 0 END field2
  FROM (
    Select 
     ydata, 
     Case When xField > 10
     then 20
     when xField > 48
     then 10
     else 0
     end as field1
  from myData
) subquery