2016-04-14 43 views
0

Aşağıdaki gibi iki tablo, table_a ve table_b var.Bir varchar için sayısal bir değer verdikten sonra satırın toplam değerleri

Tablo table_a: Her varchar değeri sayısal bir değer verilir table_a olarak

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

: 2 olarak yüksek 1 olarak, Orta ve düşük

3 olarak Tablo table_b :

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

table_b numaralı satırda ortalama değerler (yok sayılıyor) satırı ve güncelleştirme ortalama sütunu nasıl alınır? Örneğin

aşağıdaki tabloya bakınız:

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

cevap

0

sayesinde, birkaç değişiklik ve bu benim için çalışıyor yaptı. aşağıda benim değişimim.

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

bir yöntem kaba kuvvet geçerli: cevap için

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

Merhaba @Gordon, Cevabınız ama son kelepçe sonunda bir sözdizimi hatası alıyorum ")" – Taz

+0

@Taz için teşekkürler. . . Parantezlerde bariz bir sorun görmüyorum. –