2008-11-13 11 views
14

me gustaría hacer una (MS) consulta SQL que devuelve algo como esto:línea de SQL si el tipo de contenido Cuestión

Col1 Col2     Col3 
---- --------------------- ------ 
AAA 18.92     18.92 
BBB 20.00     40.00 
AAA 30.84     30.84 
BBB 06.00     12.00 
AAA 30.84     30.84 
AAA 46.79     46.79 
AAA 86.40     86.40 

donde Col3 es igual a Col2 cuando Col1 = AAA y Col3 es el doble cuando Col2 Col1 = BBB. ¿Puede alguien señalarme en la dirección correcta, por favor?

+1

Sé que esta es una vieja pregunta, pero ahora que tenemos SQL Server 2012 uno puede usar 'IIF' http://stackoverflow.com/a/23991354 – jahu

Respuesta

32

No mencionó qué tipo de base de datos está utilizando. Aquí hay algo que va a trabajar en SQL Server:

SELECT Col1, Col2, 
    CASE WHEN Col1='AAA' THEN Col2 WHEN Col1='BBB' THEN Col2*2 ELSE NULL END AS Col3 
FROM ... 
+0

Ooh: no había pensado en eso interpretación de la pregunta. Pensé que estaba pidiendo una compleja cláusula where. Será interesante ver cuál usa. –

+0

Creo que quiere filtrar los registros. –

1
select * 
from yourtable 
where (Col3 = col2 AND Col1 = 'AAA') OR 
    (Col3 = (2*Col2) AND Col1='BBB') 
+0

Ooh: no había pensado en esa interpretación de la pregunta. Pensé que estaba pidiendo una columna calculada. Le interesará ver cuál usa. –

2

Depende de su sabor de SQL. Caso/Cuando funciona con SQL Server (y posiblemente otros).

Select Col1, Col2, 
     Case When Col1 = 'AAA' Then Col2 Else Col2 * 2 End As Col3 
From YourTable 
0

A veces los valores son null, por lo que se pueden manejar de esta manera:

select Address1 + (case when Address2='' then '' else ', '+Address2 end) +    
    (case when Address3='' then '' else ', '+ Address3 end) as FullAddress from users 
7

También puede utilizar los ISNULL o COALESCE funciones como así, si los valores de ser nulo:

SELECT ISNULL(Col1, 'AAA') AS Col1, 
     ISNULL(Col2, 0) AS Col2, 
     CASE WHEN ISNULL(Col1, 'AAA') = 'BBB' THEN ISNULL(Col2, 0) * 2 
      ELSE ISNULL(Col2) 
     END AS Col3 
FROM Tablename 
Cuestiones relacionadas