-1

次のSQLサーバー計算を行っています。

SELECT SUM(COALESCE(ceiling(xm.datapoints / 8) + 1, 1)

問題は、上限値に常に + 1 を加算する必要がないことです。

  • その場合xm.datapoints % 8 > 0、+ 1 を追加する必要があります。
  • xm.datapoints % 8 = 0+ 1を追加しない場合。

では、+ 1 だけが追加されるようにクエリを変更するにはどうすればよいix 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
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

それがあなたが達成したいことに関連している場合: 8 で割り切れる最も近い値に丸めたい場合、この少しのビット単位の魔法を使用できます。

SELECT xm.datapoints & (~ 7)

多分それは助けます...

于 2013-11-25T10:19:21.327 に答える
0

0次のようNULLに扱うことができますNULLIF

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

Demo

于 2013-11-25T09:45:53.337 に答える