0

该表是

 id  col1    col2  
 1   former  good  
 2   future  fair
 3   now     bad
 4   former  good
    .............

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

1) 如果 col1 = 'former' THEN 该行得到 0.2 分,如果 'now' THEN '0.7' ,如果 'future' THEN 0.3

2) 如果 col2 = 'good' THEN 该行得到 0.8 分,如果 'bad' THEN '0.1' ,如果 'fair' THEN 0.5


因此,我需要在 WHERE 子句中分配数值。我想避免更改 SELECT 中的值,因为我需要用户能够看到标签(“好”、“现在”等)而不是数字。

我怎样才能做到这一点?

SELECT * 
FROM mytable 
WHERE ?
4

2 回答 2

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
于 2013-11-01T14:52:27.290 回答
1
SELECT * FROM myTable where col1 + col2 > 0.8

但是为我们提供表格的真实结构。

于 2013-11-01T14:20:02.533 回答