在伪代码中,这基本上就是我想做的事情:
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),它在某种程度上限制了选项。
答案 0 :(得分:8)
在这里,您可以使用布尔表达式在SQL中评估为0或1的技巧:
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