对不起,如果这是愚蠢的,我真的是一个新手试图钉这个。
Table A:
ID Rank Name
1 100 Name1
1 45 Name2
2 60 Name3
2 42 Name4
2 88 Name5
Table B:
ID FileName
1 fn1
2 fn2
我想要的是
这就是我的查询的外观,但是当我执行连接时,它提供了多行结果(而不是max
select B.Id B.FileName,A.Name
FRom B
JOIN (
select A.Id, MAX(A.Rank)as ExpertRank
from A
group by A.Id
) as NewA on A.Id = B.ID
join B on A.Rank = NewA.Rank
子查询工作正常,我在执行连接时遇到问题。
我该如何解决这个问题?
- 谢谢-谢谢
我有SQL Server 2008 R2
最后一个是我错过的。
select B.Id B.FileName,A.Name
FRom B
JOIN (
select A.Id, MAX(A.Rank)as ExpertRank
from A
group by A.Id
) as NewA on A.Id = B.ID
join B on A.Rank = NewA.Rank
and A.Id = newA.Id
4条答案
按热度按时间rpppsulh1#
你写的东西在from子句中缺少了A,所以不完全清楚你哪里错了,但这应该可以用
查看它是否正常工作here
或者,您也可以使用rownumber
看它如何工作here
sg3maiej2#
下面是使用JOIN而不是MAX()的答案:
如果同一id没有重复的rank,那么就不需要
DISTINCT
。pengsaosao3#
就我个人而言,我喜欢下面的。只是更干净的海事组织(虽然不确定性能)
ubby3x7f4#
最简单的方法和我个人的喜好是做以下:
这样做可能看起来不明显,但它确实很好用。