我想在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)
提前致谢!
答案 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
。