2010-02-18 2 views
5

Dans psuedo-code, c'est bascially ce que je voudrais faire:calcul différentes sommes en fonction de la valeur d'une colonne

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

(. Les noms de colonnes, etc. sont juste pour illustration)

En anglais: Je dois additionner des colonnes différentes pour chacun des quelques milliers d'enregistrements. Je voudrais faire la somme en SQL, si possible. Il n'y a qu'une ou deux différences entre les conditions, soit une seule colonne manquante/ajoutée, une substitution, ou les deux. Ceci est basé sur la logique métier de l'application, pas une décision de conception de mon choix. J'utilise sqlite3 (3.6.10), ce qui limite quelque peu les options.

Répondre

8

Ici, vous pouvez utiliser une astuce que les expressions booléennes sont évaluées à 0 ou 1 dans SQL:

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

Une façon plus générale (et plus conventionnel) est d'utiliser une expression CASE:

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

Vous pouvez aussi faire quelque chose comme ceci pour inclure une expression CASE sans répéter les termes communs:

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

C'est exactement ce dont j'avais besoin, merci. Fonctionne comme un charme. –