如何在t-sql选择中执行简单的字符串映射?

时间:2012-04-10 21:50:43

标签: sql sql-server sql-server-2008 tsql

在T-SQL中,我可以将算术作为select的一部分。例如,假设我有一个表Math,其中包含一个名为Decimal的列。我可以进行以下查询。

SELECT 100*Decimal FROM Math

我想知道是否也可以在SELECT中创建逻辑,例如{ A => B,F => Z}因此每次列为A时,它返回B,每次列为F时,它返回Z.

如果这是一个新问题我很抱歉,因为我对SQL不是很有经验。

3 个答案:

答案 0 :(得分:16)

我认为你想使用CASE表达式:

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

另请注意,它有两种不同的语法,请选择最适合您的语法。

答案 1 :(得分:6)

您可以创建一个包含两列的表变量,一列用于映射的内容,另一列用于映射到的内容。然后,只需加入要重新映射的列上的表变量。

CASE语句适用于少量比较,但如果你想做很多重映射,那么表变量可能是更好的选择。

像这样......

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

答案 2 :(得分:3)

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