2010-02-18 4 views
5

In psuedo-Code, dies bascially ist, was würde ich tun mag:unterschiedliche Summen Computing in Abhängigkeit vom Wert einer Spalte

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

(. Die Spaltennamen usw. sind nur für Illustration)

In Englisch: Ich muss verschiedene Spalten für jeden von ein paar tausend Datensätze summieren. Ich würde gerne die Summe in SQL machen, wenn möglich. Es gibt nur einen oder zwei Unterschiede zwischen den Bedingungen, entweder eine einzelne Spalte fehlt/hinzugefügt, eine Substitution oder beides. Dies basiert auf der Geschäftslogik der Anwendung, nicht auf einer Designentscheidung meiner Wahl.

Ich benutze sqlite3 (3.6.10), was die Optionen etwas einschränkt.

Antwort

8

Hier können Sie einen Trick verwenden, die Boolesche Ausdrücke entweder 0 oder 1 in SQL bewerten:

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

Ein allgemeineres (und konventionell) Art und Weise ist ein CASE-Ausdruck zu verwenden:

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

Sie können auch etwas tun einen CASE-Ausdruck zu schließen, ohne die gemeinsamen Bedingungen zu wiederholen:

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

Das ist genau das, was ich brauchte, danke. Klappt wunderbar. –

Verwandte Themen