2010-02-18 81 views
5

在僞代碼,這是bascially不同數額什麼,我想這樣做:計算依賴於一個列的值

select 
    if a1 >= 0 and a1 <= 2 
     a2 + a7 + a8 as sum 
    else 
     a2 + a8 as sum 
from table_name 
; 

(列名等,都只是爲了說明)

英文:我需要爲幾千條記錄中的每條記錄總結不同的列。如果可能的話,我想在SQL中完成總和。這些條件之間只有一兩個差異,一個列丟失/添加,一個替代或兩者兼有。這是基於應用程序的業務邏輯,而不是我選擇的設計決策。

我正在使用sqlite3(3.6.10),它在某種程度上限制了選項。

回答

8

在這裏,你可以使用一個技巧,布爾表達式評估爲0或1在SQL:

SELECT a2 + a8 + a7 * (a1 BETWEEN 0 AND 2) AS SUM 
FROM table_name 

更一般的(和更常規的)的方法是使用一個CASE表達式:

SELECT 
    CASE WHEN a1 BETWEEN 0 AND 2 
     THEN a2 + a7 + a8 
     ELSE a2 + a8 
    END AS SUM 
FROM table_name 

你也可以做這樣的事情,包括一個CASE表達式,而不需要重複常用術語:

SELECT 
    a2 + a8 + (CASE WHEN a1 BETWEEN 0 AND 2 THEN a7 ELSE 0 END) AS SUM 
FROM table_name 
+0

這正是我需要的,謝謝。奇蹟般有效。 – 2010-02-18 16:23:38