2011-10-07 8 views
11

Necesito una declaración de caso que permita coincidencias parciales. Obtengo un error de sintaxis, pero me pregunto si es posible algo similar a esto. Si no es así, mi solución es secundaria a volver a escribir como un cursor ... Ejemplo:SQL 2005 ¿Puedo usar palabra clave como en una declaración de caso

SELECT CASE ColumnName 
      WHEN 'value1' THEN 'answer1' 
      WHEN 'value2' THEN 'answer2' 
      WHEN LIKE '%TEST%' THEN 'answer3' 
     END AS Answer 
FROM TableName 
+7

Por el amor de SQL, no utilice un cursor! – Widor

+0

Está utilizando la expresión "simple' CASE' pero debe utilizar la expresión "CASE buscado". Consulte [la documentación] (http://msdn.microsoft.com/en-us/library/ms181765 (v = SQL.90) .aspx). – onedaywhen

Respuesta

26

probar este ejemplo

SELECT CASE 
      WHEN ColumnName = 'value1' THEN 'answer1' 
      WHEN ColumnName = 'value2' THEN 'answer2' 
      WHEN ColumnName LIKE '%TEST%' THEN 'answer3' 
     END AS Answer 
FROM TableName 

puede ejecutar

SELECT name,CASE 
      WHEN Name = 'sysobjects' THEN 'answer1' 
      WHEN Name = 'syscols' THEN 'answer2' 
      WHEN Name LIKE '%p%' THEN 'answer3' 
      ELSE 'unknown' 
     END AS Answer 
FROM sysobjects 
7

necesidad de utilizar una sintaxis ligeramente diferente CASE:

SELECT CASE WHEN ColumnName LIKE 'value1' THEN 'answer1' 
      WHEN ColumnName LIKE 'value2' THEN 'answer2' 
      WHEN ColumnName LIKE '%TEST%' THEN 'answer3' 
ELSE 'not like any of them' END [Answer] 
FROM TableName 
3

Alternativamente, puede anidar condición CASE y CASO CUANDO cláusulas de valor, así:

SELECT CASE ColumnName 
      WHEN 'value1' THEN 'answer1' 
      WHEN 'value2' THEN 'answer2' 
      ELSE CASE WHEN ColumnName LIKE '%TEST%' THEN 'answer3' END 
     END AS Answer 
FROM TableName 
2

Está utilizando el "simple CASE expresión", sino que debe utilizar el "buscaron CASE expresión". Ver the documentation para algunos ejemplos.

0

En Oracle SQL 10

SELECT 
    CASE WHEN instr(ColumnName, 'value1')>0 THEN 'answer1' 
     WHEN instr(ColumnName,'value2')>0 THEN 'answer2' 
     WHEN instr(ColumnName,'TEST')>0 THEN 'answer3' 
     ELSE 'not like any of them' 
    END 
FROM TableName 
Cuestiones relacionadas