SQL 大小写值切换

标签 sql select case

我从另一个表中传递一系列范围从 -1 到 1 的 double 值。如果该值为正数,我想将其设为它与 1 之间的差值(即 0.2 将变为 0.8)。如果 value 为负数,我希望它现在的 delta 负值大于 1(即 0.2 将是 1.2)。

出于某种原因,当我这样做时,它会从上一个表中获取值并使它们符合第一个“WHEN”的条件(因此在这个设置中,所有传入的值都将变为正值并达到第一个“WHEN”) )。

为什么这不起作用?

SELECT SnapshotDay
    ,SnapshotHour
    ,CASE
        WHEN Delta > 0.0 THEN (1 - Delta)
        WHEN Delta <= 0.0 THEN (abs(Delta) + 1)
        END as Adjust
FROM #Difference

示例:

-0.00118341262814151 -->  0.998816587371859
 0.00130811285278974 -->  0.99869188714721

最佳答案

我不确定您为什么会看到这样的结果,但从数学上讲,您的预期结果只是1 - Delta:

SELECT SnapshotDay
    ,SnapshotHour
    ,(1 - Delta) as Adjust
FROM #Difference

如果 Delta 为正数,则会从 1 中减去:

(1 - Delta)

如果 Delta 为负数,则绝对值将加 1:

(-1*Delta + 1) == (1 - Delta)

关于SQL 大小写值切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30900884/

相关文章:

mysql - 尝试将年份与大学生联系起来

sql-server-2008 - SQL Server 2008 中带有表达式的嵌入式 CASE

sql - 事务聚合的最佳实践数据库设计是什么?

php - 使用php在sql查询中的where条件中传递数组

mysql - 如何获取一组按字段排序的数据,但空值应该稍后出现并按不同的条件排序?

jquery - 添加 optgroup 以及使用 jQuery 选择的选项

sql - 在 Oracle SQL 中合并两个字符串

mysql - 编写SQL其他优化方式

php - 带 optgroup 的 Laravel 表单下拉列表

sql-server - 使用 case 时如何更改列名? SQL 服务器查询