sql - SUM 两个 CASE 函数

标签 sql sql-server

我正在尝试对我刚刚在查询中创建的两个 CASE 函数求和。我需要这两列在我的结果集中返回,但还需要两列的总和作为“DegreeDays”在另一列中返回。我尝试了 SUM 函数,但无济于事,我尝试了一个简单的“HeatingDegreeDays + CoolingDegreeDays AS DegreeDays”,但也没有用。有什么建议吗?

  ,CASE
    WHEN TempLow > 60.5                     THEN 0
    WHEN ((TempHigh + TempLow)/2) > 60.5    THEN ((60.5-TempLow)/4)
    WHEN  TempHigh >= 60.5                  THEN (((60.5 - TempLow)/2)-((TempHigh-TempLow)/4))
    WHEN TempHigh < 60.5                    THEN (60.5-(TempHigh+TempLow)/4)
   END AS HeatingDegreeDays

  ,CASE
    WHEN TempHigh < 66.25                   THEN 0
    WHEN ((TempHigh + TempLow)/2) < 66.25   THEN ((TempHigh-66.25)/4)
    WHEN  TempLow <= 66.25                  THEN (((TempHigh - 66.25)/2)-((66.25-TempLow)/4))
    WHEN TempLow > 66.25                    THEN ((TempHigh+TempLow)/2)-66.25
   END AS CoolingDegreeDays

最佳答案

您可以重复公式:

  ,CASE
    WHEN TempLow > 60.5                     THEN 0
    WHEN ((TempHigh + TempLow)/2) > 60.5    THEN ((60.5-TempLow)/4)
    WHEN  TempHigh >= 60.5                  THEN (((60.5 - TempLow)/2)-((TempHigh-TempLow)/4))
    WHEN TempHigh < 60.5                    THEN (60.5-(TempHigh+TempLow)/4)
   END +
   CASE
    WHEN TempHigh < 66.25                   THEN 0
    WHEN ((TempHigh + TempLow)/2) < 66.25   THEN ((TempHigh-66.25)/4)
    WHEN  TempLow <= 66.25                  THEN (((TempHigh - 66.25)/2)-((66.25-TempLow)/4))
    WHEN TempLow > 66.25                    THEN ((TempHigh+TempLow)/2)-66.25
   END AS TotalDays

或者您可以将其放入子查询(或 CTE)中并说:

select . . .,
       (HeadingDegreeDays + CoolingDegreeDays) as TotalDays

关于sql - SUM 两个 CASE 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791476/

相关文章:

sql - 选择子字符串 SQL

c# - 恢复 SQL Server 数据库失败 SMO C#

sql - PostgreSQL 非常慢的索引扫描

mysql - 如何检查 MySQL 脚本中前面语句的错误?

SQL:当 UNIQUE 键约束不适用时处理表中的唯一值

mysql - 插入重复键 - 跳过自动递增 ID

sql-server - 从 SQL 标量函数返回串联值

sql-server - 每天只运行一次的触发器

sql-server - NVARCHAR 的奇怪异常

sql - 不是在 SQL 语句中吗?