如何将sql中的值映射到字符串值

时间:2016-04-27 03:33:51

标签: mysql sql

我在DB表中有一个名为type的列。它有像01,78,75,98,02,11 etc.这样的值我希望将这些值映射到字符串值中,如果值以01开头,则将其映射到名为type01的字符串值,如果以78开头,则值(选择结果值)必须为type7等任何想法的人怎么做?提前致谢。

SQL将在某种程度上如下:

Select (if(type left(2) = 07 then type7), t.dept

from team t

LEFT JOIN typetable

ON typetable.id=t.team_id;

2 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点,一种是使用case语句,另一种是使用内联表。我更喜欢内联表,它更快。您可以像任何其他表一样加入它,并使用UNION ALL构建表。像这样:

SELECT t.dept, coalesce(type_translate.name, 'no name') as name
FROM team t
LEFT JOIN typetable ON typetable.id = t.team_id
LEFT JOIN (
   SELECT '01' as lookup, 'type01' as name
     UNION ALL
   SELECT '02', 'type02'
     UNION ALL
   SELECT '03', 'type03'
     UNION ALL
   SELECT '04', 'type04'
     UNION ALL
   SELECT '05', 'type05'
     UNION ALL
   SELECT '06', 'type06'
     UNION ALL
   SELECT '06', 'type07'
) type_translate ON left(typetable.type,2) = type_translate.lookup

如果您使用的是更标准的数据库(如SQL Server,DB2,Oracle,Progress等),您可以使用VALUES表构造函数而不是UNION ALL - 同样的东西,但更好的语法。

SELECT t.dept, coalesce(type_translate.name, 'no name') as name
FROM team t
LEFT JOIN typetable ON typetable.id = t.team_id
LEFT JOIN (
   VALUES
   ('01', 'type01'), 
   ('02', 'type02'), 
   ('03', 'type03'), 
   ('04', 'type04'), 
   ('05', 'type05'), 
   ('06', 'type06'), 
   ('07', 'type07') 
) AS type_translate(lookup,name) ON left(typetable.type,2) = type_translate.lookup

答案 1 :(得分:0)

如果我理解你的要求,似乎你可能想要一个案例陈述。

SELECT CASE type WHEN '01' THEN 'type01' WHEN '02' THEN 'type02' WHEN '03' THEN 'type03' WHEN '04' THEN 'type04' END FROM team LEFT JOIN typetable ON typetable.id=t.team_id;