我有一个查询,用于从TSN2表中选择具有最大权重的不同调用者。对于这样的查询,我有这样的oracle sql查询:
select * from dbo.TSN2
where (caller,weight) in
(select caller,max(cast(weight as float))
from dbo.TSN2
group by caller);
不幸的是,这样的查询给了我"在预期条件的上下文中指定的非布尔类型的表达式" mssql中的错误。你能告诉我同样的mssql查询对我有用吗?
答案 0 :(得分:1)
非布尔类型出现在这里(调用者,权重)IN ....在IN函数之前,您无法使用多个字段。它只能检查表中的1个值。
这个问题不需要嵌套的SQL查询。
select caller,max(cast(weight as float)), other fields
from dbo.TSN2
group by caller
返回;每个来电显示和最大重量。 如果您想查看每个不同的来电者信息及其最大权重。这个查询就足够了。
但是,如果,你真的想使用嵌套查询。你需要尝试不同的方法。然而,这不是一个非常好的解决方案。
select * //from dbo.TSN2 (you dont need to include this again if it is in the subquery)
where
caller in
(select caller
from dbo.TSN2
group by caller)
AND
weight in
(select max(cast(weight as float))
from dbo.TSN2
group by caller);
非常愚蠢。所以去第一个你不需要使用嵌套查询的查询。
答案 1 :(得分:0)
以下查询将为您提供帮助
SELECT DISTINCT q.* FROM
(select caller,max(cast(weight as float)) AS Weight
from dbo.TSN2
group by caller) p
INNER JOIN dbo.TSN2 q
ON p.caller = q.caller AND cast(p.weight as float) = cast(q.weight as float)