2010-02-18 3 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 

более общий (и более обычный) способ заключается в использовании выражения случай:

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

Это именно то, что мне нужно, спасибо. Работает как шарм. –

Смежные вопросы