我在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;
答案 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;