2010-06-11 11 views
8

Estoy tratando de construir una consulta que hace una suma si un cierto parámetro es conjunto. Por ejemplo:Hacer la suma si ciertas condiciones son verdaderas

SELECT SUM(IF(<condition>,field,field)) AS total_value 

... que funciona correctamente.

Pero he más de una condición en la SI(), como:

SELECT SUM(IF(<condition> <condition>,field,field)) AS total_value 

..which no está funcionando, ¿podría tener alguna idea de lo que debería ser la consulta adecuado para ello.

actualización

Lo siento por consultas equivocadas, las consultas adecuadas son

Mi consulta actual se ve algo como esto: SELECT SUM (IF (condición1, campo, campo)) AS total_value que está trabajando correctamente.

Pero tengo más de una condición en la SI(), como SELECT SUM (IF (condición1 condición2, campo, campo)) AS total_value que no está trabajando, ¿podría tener alguna idea de lo que debería ser la consulta derecha para esto.

+0

Bienvenido a Stackoverflow. Puede editar su pregunta (y sus respuestas) haciendo clic en el enlace editar, está en el lado izquierdo, frente a su nombre de usuario & gravatar. También hay una sintaxis llamada MarkDown, que te permitirá modificar el formato para facilitar la lectura. –

Respuesta

9

leer la declaración de caso:

Select Sum(Case When column = test Then column2 Else column3 End) 
... 

Si tiene varias condiciones, puede seguir utilizando caso:

Select Sum(Case 
      When column1 = 'Foo' Then column2 
      When column1 = 'Bar' Then column3 
      When column1 = 'Gamma' Then column2 + column3 
      Else column3 End) 
From ... 

En este escenario, si column1 no es nulo y no es igual a ' Foo ', luego irá a la siguiente declaración de Cuándo. Si esa prueba no es cierta, pasará a la siguiente y así sucesivamente.

2
select sum(case when a = b and x = y then field1 + field2 else 0 end) 

Actualización:

mejor usted se refiere esto:

select sum(case when a = b then field1 else field2 end) 
+0

+1: Creo que esto es lo que hace Gugu después de –

+0

esto no funciona – Gugu

+0

@Gugu: ¿Puedes actualizar tu pregunta para incluir datos de ejemplo y resultados esperados, por lo que es más claro para nosotros lo que buscas? –

0
SELECT SUM(IF(<condition1>, 
       IF(<condition2>, 
       <field1>, 
       <field2>), 
       <field2>)) AS total_value 
+0

no funciona, obteniendo los mismos resultados que con una condición – Gugu

+0

Debe actualizar su pregunta original para aclarar exactamente qué es lo que está buscando obtener. – VeeArr

1
SELECT SUM(IF(field = value1 OR field = value2 OR field = value3,1,NULL)) AS total_value 
Cuestiones relacionadas