2010-02-18 13 views
5

W psuedo kodu, to bascially co chciałbym zrobić:obliczeniowe różne sumy w zależności od wartości jednej kolumny

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

(. Nazwy kolumn, itd. Są tylko dla ilustracji)

Po polsku: Muszę podsumować różne kolumny dla każdego z kilku tysięcy rekordów. Chciałbym zrobić sumę w SQL, jeśli to możliwe. Występują tylko jedna lub dwie różnice między warunkami, jedna kolumna brakująca/dodana, podstawienie lub jedno i drugie. Jest to oparte na logice biznesowej aplikacji, a nie decyzji projektowej według mojego wyboru.

Używam sqlite3 (3.6.10), który nieco ogranicza opcje.

Odpowiedz

8

Tutaj można użyć trick że wyrażenia boolowskie ocenić na 0 lub 1 w SQL:

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

Bardziej ogólnie (i bardziej konwencjonalne) sposobem jest użycie wyrażenia CASE:

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

można też zrobić coś takiego to wyrażenie CASE bez powtarzania wspólnych terminów:

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

Właśnie tego potrzebowałem, dziękuję. Działa jak marzenie. –

Powiązane problemy