我们正在做以下 sql server 计算:
SELECT SUM(COALESCE(ceiling(xm.datapoints / 8) + 1, 1)
问题是我们不应该总是将 + 1 添加到上限值。
- 如果
xm.datapoints % 8 > 0
那么我们应该添加+ 1。
- 如果
xm.datapoints % 8 = 0
我们不应该添加 + 1。
那么我们如何修改我们的查询以便只添加 + 1ix xm.datapoints % 8 > 0
呢?
谢谢。
我们正在做以下 sql server 计算:
SELECT SUM(COALESCE(ceiling(xm.datapoints / 8) + 1, 1)
问题是我们不应该总是将 + 1 添加到上限值。
xm.datapoints % 8 > 0
那么我们应该添加+ 1。xm.datapoints % 8 = 0
我们不应该添加 + 1。那么我们如何修改我们的查询以便只添加 + 1ix xm.datapoints % 8 > 0
呢?
谢谢。
我怀疑这xm.datapoints
是一个整数,所以除法结果被截断。尝试这个:
SELECT SUM(COALESCE(ceiling(xm.datapoints / 8.0), 0.0)))
或者如果您只想使用整数算术:
SELECT SUM(COALESCE(1+(xm.datapoints-1)/8, 0))
SELECT SUM(COALESCE(CEILING(xm.datapoints / 8)
+ CASE WHEN xm.datapoints % 8 > 0 THEN 1
ELSE 0 END, 1))
您还需要一个额外的右括号,但这可能是复制和粘贴错误。
尝试这个
SELECT SUM(COALESCE(ceiling(xm.datapoints / 8) + (CASE WHEN xm.datapoints %8 = 0 THEN 1 ELSE 0 END), 1))
SELECT SUM(COALESCE(case when (xm.datapoints % 8 > 0)
then ceiling((xm.datapoints % 8) + 1)
when xm.datapoints % 8 = 0
ceiling(xm.datapoints % 8 end), 1)
如果这与您想要实现的目标有关:如果您想向下舍入到可被 8 整除的最接近的值,您可以使用这个按位魔法:
SELECT xm.datapoints & (~ 7)
也许它有帮助...