2012-04-10 5 views
9

En T-SQL, puedo hacer aritmética como parte de una selección. Por ejemplo, supongamos que tengo una tabla Math con una columna llamada Decimal. Puedo hacer la siguiente consulta.¿Cómo realizo una asignación de cadena simple como parte de una selección t-sql?

SELECT 100*Decimal FROM Math 

Me pregunto si también es posible hacer la lógica en el SELECT, donde se crea un mapeo como { A => B, F => Z} de manera que cada vez que la columna es una, devuelve B , y cada vez que la columna es F, devuelve Z.

Me disculpo si esta es una pregunta nueva, porque no tengo mucha experiencia en SQL.

Respuesta

13

Creo que desee utilizar la expresión CASE:

SELECT 
    CASE column1 
    when 'A' THEN 'B' 
    when 'F' THEN 'Z' 
    END 
FROM Tbl 

También tenga en cuenta que hay dos sintaxis diferentes para ello, elegir uno que sea más adecuado para usted.

+0

Las tres respuestas fueron útiles, pero esto resuelven mi problema implícita la mejor, y yo apreciamos el enlace a la documentación. No sabía acerca de la existencia de la instrucción CASE en SQL hasta que vi esto. – merlin2011

2
SELECT CASE WHEN YourColumn = 'A' THEN 'B' 
      WHEN YourColumn = 'F' THEN 'Z' 
      ELSE YourColumn 
     END AS MappedColumn 
    FROM YourTable 
6

Se puede crear una variable de tabla que tiene dos columnas, una para lo que se está mapeada y otro para lo que se está asignado. Luego únase a la variable de la tabla en la columna que desea reasignar.

Las sentencias CASE funcionan muy bien para un pequeño número de comparaciones, pero si quiere hacer muchas remapelaciones, entonces la variable de tabla podría ser la mejor opción.

algo como esto ...

DECLARE @Mappings TABLE 
(
    MapFrom VARCHAR(50), 
    MapTo VARCHAR(50) 
) 

insert into @Mappings values 
('A', 'B'), 
('F', 'Z'), 
('other', 'mappings'); 


select m.MapTo 
from yourTable t 
inner join @Mappings m on m.MapFrom = t.columnName 
+0

Otra ventaja del enfoque de variable de tabla es que si necesita asignar columnas múltiples, o mapear varias veces en consultas diferentes en un procedimiento almacenado, permanece limpio sin duplicar la declaración de caso. –

Cuestiones relacionadas