2016-04-27 14 views
0

DB型テーブルにtypeという名前の列があります。 01,78,75,98,02,11 etc.のような値があります。これらの値を次のような文字列値にマップしたいと思います。値が01で始まる場合はtype01という文字列値にマップし、78で始まる場合は値(select result value)は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

これを行うには2つの方法があり、一つはcase文であり、他方は、インラインテーブルです。私はインラインテーブルがより好きで、それはより速いです。他のテーブルと同様に結合し、UNION ALLを使用してテーブルを構築します。このように: - 同じこと、あなたがより多くの標準(SQL Serverの、DB2などの、オラクル、プログレス、など)DBを使用している場合は

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 

あなたは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 
関連する問題