2016-04-27 120 views
0

我在DB表中命名爲type的列。它的值有如01,78,75,98,02,11 etc.我想將這些值映射爲一個字符串值,如果值以01開頭,則將其映射爲名爲type01的字符串值,如果以78開頭,則值(選擇結果值)必須是type7等。想法傢伙如何做到這一點?提前致謝。如何將sql中的值映射到字符串值

SQL會以某種方式如下圖所示:

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

from team t 

LEFT JOIN typetable 

ON typetable.id=t.team_id; 

回答

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;

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 

如果您使用的是更標準的DB(如SQL Server,DB2,甲骨文,進展情況等),您可以使用值表的構造函數,而不是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 
相關問題