use*_*148 22 sql sql-server sql-server-2008
对不起,如果这是愚蠢的,我真的是一个新手试图指出这一点.
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
Run Code Online (Sandbox Code Playgroud)
我想要的是
1 fn1 name1
2 fn2 name5
Run Code Online (Sandbox Code Playgroud)
这是我的查询的样子,但是当我进行连接时,它给了我多行结果(而不是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
Run Code Online (Sandbox Code Playgroud)
子查询工作正常,我得到了加入的问题.
我该如何解决?
谢谢.
我有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
Run Code Online (Sandbox Code Playgroud)
Con*_*rix 30
你写的是在from子句中缺少A所以它不完全清楚你哪里出错但这应该有效
select
B.Id,
B.FileName,
A.Name
FRom B
INNER JOIN A
ON A.id = B.id
INNER JOIN (
select A.Id, MAX(A.Rank)as ExpertRank
from A
group by A.Id
) as NewA
ON a.Id = NewA.ID
AND a.Rank = NewA.ExpertRank
Run Code Online (Sandbox Code Playgroud)
看到它在这里工作
或者你也可以使用rownumber
WITH CTE AS
(
SELECT ID,
RANK,
Name,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY RANK DESC) rn
FROM A
)
SELECT b.Id b.FileName,cte.Name
FROM
b
INNER JOIN cte
ON b.id = cte.id
and cte.rn = 1
Run Code Online (Sandbox Code Playgroud)
看到它在这里工作
Mar*_*ams 25
这是JOIN而不是MAX()的答案:
SELECT DISTINCT b.id, b.filename, a1.name
FROM a a1
JOIN b
ON b.id = a1.id
LEFT JOIN a a2
ON a2.id = a1.id
AND a2.rank > a1.rank
WHERE a2.id IS NULL
Run Code Online (Sandbox Code Playgroud)
如果同一个ID没有重复的排名,那么您不需要DISTINCT
.
归档时间: |
|
查看次数: |
64449 次 |
最近记录: |