1

10進数タイプのフィールドは、範囲(間隔)に分割し、異なる方法で計算してから合計する必要があります。

この問題は、行ではなくフィールド値に関係します。したがって、テーブルのすべての行の特定のフィールド(fieldX)については、次のようになります。

FieldX <  0.013           <----remain just FieldX
FieldX >= 0.013 to 0.026  <----be multiplied with 50%.
FieldX >  0.026           <----be omitted.

編集者のコメント:[0.013, 0.026]以下の例は、式が閉閉範囲の値であることを示しています。

  • 0.013 + (FieldX - 0.013) * 0.5

次に、これらの範囲(間隔)または部分を合計する必要があります。

例:

FieldX     Result
-0.12      -0.12
-0.05      -0.05
+0.05      +0.05                                 — mismatch with specification
+0.011     +0.011
+0.014     +0.0135 = (0.013 + (0.014-0.013)*50%)
+0.021     +0.017  = (0.013 + (0.021-0.013)*50%)
+0.026     +0.0195 = (0.013 + (0.026-0.013)*50%)
+0.031     +0.0195 = (0.013 + (0.026-0.013)*50%) — mismatch with specification

それを解く天才にノーベル賞を配ります!

4

2 に答える 2

0
SELECT SUM(CASE
           WHEN FieldX <  0.013 THEN FieldX
           WHEN FieldX <= 0.026 THEN 0.013 + 0.5 * (FieldX - 0.013)
           ELSE                     NULL
           END)
  FROM YourTable

アグリゲートはNULLを無視します。これは、NULLを省略するのと同じです。SUM()の場合、NULLの代わりに0.0を使用できますが、COUNTまたはAVGの場合は使用できないことに注意してください。行を無視するもう1つの方法は、もちろん、WHERE句を使用して行を除外することです。

SELECT SUM(CASE
           WHEN FieldX <  0.013 THEN FieldX
           WHEN FieldX <= 0.026 THEN 0.013 + 0.5 * (FieldX - 0.013)
           END)
  FROM YourTable
 WHERE FieldX <= 0.026
于 2012-09-18T05:56:06.757 に答える
0

これは、 CASEステートメントを使用して実行できるはずです。

SELECT  *,
        CASE 
            WHEN FieldX < 0.013
                THEN FieldX
            WHEN FieldX >= 0.013 and FieldX < 0.026 
                THEN 0.013 + (FieldX - 0.013 ) * .5
            ... and so on
        END
FROM    [Table]
于 2012-09-18T04:07:20.273 に答える