-1

我们正在做以下 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呢?

谢谢。

4

6 回答 6

1

我怀疑这xm.datapoints是一个整数,所以除法结果被截断。尝试这个:

SELECT SUM(COALESCE(ceiling(xm.datapoints / 8.0), 0.0)))

或者如果您只想使用整数算术:

SELECT SUM(COALESCE(1+(xm.datapoints-1)/8, 0))
于 2013-11-25T09:46:06.737 回答
0

您可以将其0视为:NULLNULLIF

SELECT COALESCE(CEILING(NULLIF(@xmdatapoints, 0) / 8) + 1, 1)

Demo

于 2013-11-25T09:45:53.337 回答
0
SELECT SUM(COALESCE(CEILING(xm.datapoints / 8) 
                    + CASE WHEN xm.datapoints % 8 > 0 THEN 1 
                                                      ELSE 0 END, 1))

您还需要一个额外的右括号,但这可能是复制和粘贴错误。

于 2013-11-25T09:42:09.000 回答
0

尝试这个

SELECT SUM(COALESCE(ceiling(xm.datapoints / 8) + (CASE WHEN xm.datapoints %8 = 0 THEN 1 ELSE 0 END), 1))

于 2013-11-25T09:43:09.427 回答
0
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)
于 2013-11-25T09:37:37.277 回答
0

如果这与您想要实现的目标有关:如果您想向下舍入到可被 8 整除的最接近的值,您可以使用这个按位魔法:

SELECT xm.datapoints & (~ 7)

也许它有帮助...

于 2013-11-25T10:19:21.327 回答