将varchar转换为decimal并比较查询中的值

时间:2014-01-12 15:33:37

标签: sql-server

我想在varchar列中的十进制值之间进行比较。 比较应该是最大年龄是否高于每个groupid的最小年龄* 10

例如

(年龄列是varchar):

ID | Name | Age  | GroupID
--------------------------
1  | AAA  | 10.1 | 1
2  | BBB  | 11   | 1
3  | CCC  | 31.2 | 1
4  | DDD  | 30.4 | 2

这是我在搜索解决方案后尝试做的事情

SELECT TOP 10 * FROM Groups g
JOIN People p1 ON p1.GroupID = g.ID
JOIN People p2 ON p2.GroupID = g.ID
WHERE CONVERT(DECIMAL(8,2),ISNULL(p1.Age,0)) > (CONVERT(DECIMAL(8,2),ISNULL(p2.Age,0)) * 10)

提前致谢!

1 个答案:

答案 0 :(得分:0)

我认为您想要使用窗口函数:

select t.*
from (select t.*,
             min(case when isnumeric(Age) = 1 then cast(Age as float) end) over
                 (partition by groupID) as minage
      from table t
     ) t
where age > 10 * minage;

case语句有助于防止年龄不是数字的错误。此外,我认为float对于年龄来说是一个足够好的数据类型,但您也可以使用decimal