2012-09-18 38 views
1

需要將十進制類型字段拆分成不同的範圍(間隔),然後進行相加計算,然後進行合計。對十進制值的不同範圍(間隔)的不同計算

此問題涉及字段值,而不是行。 因此,對於在一個表中的某個字段(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 

我將手從諾貝爾獎到誰解決它的天才!

+1

您的例子似乎沒有什麼意義 - 0.05應等於0.05,但你說的* obmit *如果> 0.026 –

+0

的應該省略0.031的值,不是嗎? –

回答

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,這無異於忽略它。請注意,對於SUM(),您可以使用0.0來代替NULL,但不能用於COUNT或AVG。另一種方式忽略行是將它們過濾掉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 
0

您應該使用能夠做到這一個CASE Statement

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]