如何在WHERE子句中为字符串赋值?

Bor*_*iev 0 teradata

表是

 id  col1    col2  
 1   former  good  
 2   future  fair
 3   now     bad
 4   former  good
    .............
Run Code Online (Sandbox Code Playgroud)

目标:我只需要选择那些累积分数高于0.8的行

1)如果col1 ='前'那么该行获得0.2分,如果'现在'那么'0.7',如果'未来'那么0.3

2)如果col2 ='good'那么该行得到0.8分,如果'坏'那么'0.1',如果'公平'则为0.5


因此,我需要在WHERE子句中分配数值.我想避免在SELECT中更改值,因为我需要用户能够看到标签('good','now'等)而不是数字.

我怎样才能做到这一点?

SELECT * 
FROM mytable 
WHERE ?
Run Code Online (Sandbox Code Playgroud)

dno*_*eth 7

使用CASE根据您的逻辑分配权重:

WHERE 
   CASE col1 
      WHEN 'former' THEN 0.2
      WHEN 'now'    THEN 0.7
      WHEN 'future' THEN 0.3
      ELSE 0
   END +
   CASE col2 
      WHEN 'good' THEN 0.8 
      WHEN 'bad'  THEN 0.1
      WHEN 'fair' THEN 0.5
      ELSE 0
   END > 0.8
Run Code Online (Sandbox Code Playgroud)