2013-11-01 41 views
0

表是如何在WHERE子句中为字符串分配权重?

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

目标:我要只选择具有累积分值高于0.8

1)如果COL1 =“前”,那么该行获得0.2分的那些行,如果'now'那么'0.7',如果'future'那么0.3

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


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

我该怎么做?

SELECT * 
FROM mytable 
WHERE ? 

回答

7

使用情况分配根据你的逻辑的重量:

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 
+0

谢谢。但为什么我得到一个错误:'字符串字符未能转换为数字值...' –

+0

'字符串未能转换为数字值“。我应该引入一个新变量吗? –

+0

这将与您的示例数据保持一致。它必须是您的查询中的其他内容。你能证明你试过的吗? – dnoeth

1
SELECT * FROM myTable where col1 + col2 > 0.8 

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

+0

col1和col2上是'varchar' –

+0

VARCHAR是一个尝试的类型 –

+0

+1。真正的桌子是什么 –

相关问题