2014-01-28 98 views
0

是否可以在表上选择,然后使用Case语句将结果填充到不同的列中?我见过一个使用'Case'查询但不插入新列的例子。我尝试了各种组合,但总结不足。使用case语句插入不同的列

例如,

Table - CLIENTDETAILS 

    VATRATE - 1, 2, 3, 0 //This is a populated column with 6500 rows 

    VATPERC - 15.0, 17.5, 20.0, 0.00 //This is an empty column that needs to be filled with case results. 

    INSERT INTO CLIENTDETAILS(VATPERC) values(
    (SELECT CASE VATRATE 
     WHEN '1' THEN '15.0' 
     WHEN '2' THEN '17.5' 
     WHEN '3' THEN '20.0' 
     WHEN '0' THEN '0.00' 
    END 
    FROM CLIENTDETAILS AS CLIENTDETAILS_1)) 

感谢您的帮助一如既往。

+0

难道你不想要更新吗? – mafafu

+0

为什么你需要*存储*这些值对每一行?你能不能只有查找表(带有VATRATE和VATPERC),你可以根据需要查找这些值? –

回答

3

这听起来像你只是想从现有的行

UPDATE CLIENTDETAILS 
    SET VATPERC = 
    CASE VATRATE 
     WHEN '1' THEN '15.0' 
     WHEN '2' THEN '17.5' 
     WHEN '3' THEN '20.0' 
     WHEN '0' THEN '0.00' 
     END 
    FROM CLIENTDETAILS; 

Fiddle here

我会更新一个不同的列不过建议将VATRATEVATPERC的类型更改为数字类型,这将允许计算没有铸造完成。

+0

我建议'VATPERC'应该是一个计算列或一个单独的表与这种映射。 –

+0

是的,+1,似乎没有任何额外的信息可以从这个新的列(除非它是非规范化的性能,例如一个读书店) – StuartLC

+1

哇,当然它的更新,我一直在看这个到很长。感谢斯图尔特。 vatrate列和vatperc是数字类型,对于混淆感到抱歉。 – ullevi83

0

Case语句可用于您的需要如下:

INSERT INTO CLIENTDETAILS(VATPERC) 
    SELECT 
    CASE 
     WHEN VATRATE = '1' THEN '15.0' 
     WHEN VATRATE = '2' THEN '17.5' 
     WHEN VATRATE = '3' THEN '20.0' 
     WHEN VATRATE ='0' THEN '0.00' 
    END 
    FROM 
    CLIENTDETAILS