2012-02-15 9 views
19

Aquí es una simplificación del problema: Tengo un selecto que tiene este aspecto:SQL retorno de datos de columna condicional en una instrucción de selección

Select ID, Assignee, WorkStream from assignees; 

Y una instantánea de los datos devueltos se veía así

1|Joe Soap|Internal 

2|Mrs Balls|External 

Lo que me gustaría hacer es hacer que el select no muestre el nombre de Assignee si el worksteam es interno. En lugar de mostrar el flujo de trabajo.

Así, por ejemplo, el resultado que quiero conseguir sería la siguiente:

1|Internal|Internal 

2|Mrs Balls|External 

espero que esto tiene sentido? Básicamente es una selección condicional que puede detectar si una cierta columna contiene un cierto valor, luego reemplaza el valor de otra columna con [lo que sea].

¡Gracias de antemano!

EDITAR Quiero lograr algo como esto:

Select ID, if (workstream='internal' select Workstream as Assignee - else - select Assignee as Assigneee), WorkStream from assignees; 

Respuesta

40

Usted no ha mencionado su DBMS, sino una declaración buscado CASE funciona en todos los principales DBMS de que conozco fuera.

SELECT ID 
     , CASE WHEN WorkStream = 'Internal' 
       THEN WorkStream 
       ELSE Assignee 
      END AS Assignee 
     , Workstream 
FROM assignees 

Referencia: MSDN

CASO

evalúa una lista de condiciones y devuelve uno de varios posibles expresiones de resultados.

+0

¡Luce bastante bien, déjame probarlo rápido! –

3
SELECT ID, 
     CASE WorkStream WHEN 'Internal' THEN 'INTERNAL' ELSE Assignee as Assignee, WorkStream from assignees 

espero que esto ayuda.

Cuestiones relacionadas