2016-04-14 27 views
0

我有兩個表,table_atable_b,如下所示。將數值賦給varchar後一行的總和值

table_a

a_id |columna |varchar1|varchar2|varchar3 
---------------------------------- 
| 1 | a  | Medium | High | n/a 
| 2 | b  | Low | n/a | n/a 
| 3 | c  | Medium | Low | High 

table_a每個VARCHAR值被賦予一個數值: 爲1,中等如2和爲3

table_b

b_id |columna_fk|average 
-------------------------- 
| 1 | a  | 
| 1 | b  | 
| 3 | c  | 

如何獲得行的平均值(忽略n/a)並更新table_b中的平均值列?

例如見下表:

b_id |columna_fk|average 
-------------------------- 
| 1 | a  | 1.5 
| 1 | b  | 3 
| 3 | c  | 2 

回答

0

感謝您的回答,我做了一些改變,它的工作對我來說。以下是我的改變。

update b 
set average = 
(case when 
((case varchar1 when 'High' then 1 when 'Medium' then 2 when 'Low' then 3 else 0 end) + 
(case varchar2 when 'High' then 1 when 'Medium' then 2 when 'Low' then 3 else 0 end) + 
(case varchar3 when 'High' then 1 when 'Medium' then 2 when 'Low' then 3 else 0 end)) <> 0 
then 
((case varchar1 when 'High' then 1 when 'Medium' then 2 when 'Low' then 3 else 0 end) + 
(case varchar2 when 'High' then 1 when 'Medium' then 2 when 'Low' then 3 else 0 end) + 
(case varchar3 when 'High' then 1 when 'Medium' then 2 when 'Low' then 3 else 0 end)) 
/
((case varchar1 when 'n/a' then 0 else 1 end) + 
(case varchar2 when 'n/a' then 0 else 1 end) + 
(case varchar3 when 'n/a' then 0 else 1 end)) 
else null end) 
from a where a.columna = b.columna_fk; 
1

一種方法是蠻力:

update b 
    set average = ((case varchar1 when 'High' then 1 when 'Medium' then 2 when 'Low' then 3 end) + 
        (case varchar2 when 'High' then 1 when 'Medium' then 2 when 'Low' then 3 end) + 
        (case varchar3 when 'High' then 1 when 'Medium' then 2 when 'Low' then 3 end) 
       )/
        nullif((case varchar1 when 'n/a' then 0 else 1 end) + 
         (case varchar2 when 'n/a' then 0 else 1 end) + 
         (case varchar3 when 'n/a' then 0 else 1 end) 
         ) 
    from a 
    where a.columna = b.columna_fk; 
+0

@Gordon您好,感謝您的回答,但我在最後托架年底得到一個語法錯誤「)」 – Taz

+0

@Taz。 。 。我沒有看到任何明顯的括號問題。 –