2017-06-09 14 views
-1

Wie erstelle ich eine MSSQL-Abfrage, die TabelleA mit TableB über das Feld ID verbindet, aber ich möchte, dass es auf ID Datensatz, der den höchsten Wert in der Spalte Number hat?Verknüpfen von Tabellen mit Kriterien

TableA 
ID 
1 
2 
3 
4 

TableB 
ID Number 
1 1 
1 2 
1 3 
2 1 
3 1 
3 2 
4 1 
4 2 
4 3 

Ich würde dies als meine Ausgabe wollen

TableJoined 
ID Number 
1 3 
2 1 
3 2 
4 3 

Gibt es eine Möglichkeit, eine LEFT JOIN diese oder mit max() erreichen?

+0

was ist Ihre aktuelle SQL-Code? –

+0

Denken Sie darüber nach, was Sie wünschen. Warum musst du überhaupt mitmachen? TableB enthält alles, was Sie benötigen, wenn Sie ursprünglich einen inneren Join verwenden wollten. – SMor

+0

Wenn Sie '5' in der TabelleA haben, erwarten Sie in der Ausgabe' ID: 5 Number: 0'? – Arulkumar

Antwort

1

Sie können wie unten abfragen:

Select a.Id, Number from #a a join 
(
    Select top(1) with ties * from #b 
    order by row_number() over(partition by id order by number desc) 
) b on a.id = b.id 
+0

Ich ging mit Ihrer Antwort, weil ich keine Probleme mit Aggregaten stieß. – qroberts

0
Select A.Id, Max(Number) MaxNo from A 
join B on A.Id=B.Id 
Group by A.Id 
3

Beide. Verwenden Sie die Aggregation für den linken Join.

Select t1.id, max(t2.number) 
From table1 t1 
Left join table2 t2 on t1.id= t2.id 
Group by t1.id; 
-1
create table #a(
id int 
) 
go 
create table #b(
id   int, 
number  int 
) 
go 

insert into #a values(1),(2),(3),(4) 

insert into #b values(1,1),(1,2),(1,3),(2,1),(3,1),(3,2),(4,1),(4,2),(4,3) 


select #b.id,MAX(number) as maximum 
from #b left outer join #a on #b.id=#a.id 
group by #b.id 
Verwandte Themen