2017-08-26 4 views
0

Ich habe folgende Tabellenspalten und Werte ...msaccess 2007 SQL komplexe Abfrage

ColA, ColB, ColC 
b, 90, 1 
p, 95, 5 
p, 100, 6 
p, 99, 6 
p, 98, 6 
b, 94, 5 
b, 93, 1 
b, 92, 3 
o, 89, 3 
b, 88, 4 

ich die folgende Ergebnismenge benötigen:

ColA, ColB, ColC 
b, 90, 1 
b, 93, 1 
p, 95, 5 
o, 89, 3 

Im Wesentlichen ist der niedrigste Wert für COLC wo ColA ist das gleiche. Also ist der niedrigste Wert für alle b's 1 und er tritt in zwei Reihen auf. Der niedrigste Wert für alle ps ist 5 und der niedrigste Wert für alle o's ist 3. ColB ist ein Wert, der in einer anderen Tabelle verwendet wird. Also brauche ich eine Abfrage, die sich an einer anderen Tabelle über ColB anschließt.

Danke.

Antwort

1

Diese

select mainTable.* from abcTable as mainTable inner join 
(select t.colA,min(t.colC) as minColC from abcTable as t group by t.ColA) as minimumTable 
on mainTable.colA=minimumTable.ColA and mainTable.colC=minimumTable.minColC 
+0

Das hat es geschafft! Danke Eid! – user2184214

+0

Eid - Ich will nicht mehr die zweite 'b' Ergebniszeile. Ich möchte nur die Zeile, in der ColA gruppiert ist, die den niedrigsten ColC-Wert hat; und wenn es ein Unentschieden gibt, dann bestimmt der höchste ColB die Unentschiedenheit. Und wenn sie an ColC und ColB anknüpfen, dann kehren sie nur eine Zeile zurück und mir ist es egal. Können Sie das tun? – user2184214

+0

Wählen Sie distinct mainTable.colA, max (mainTable.ColB), mainTable.ColC aus abcTable als mainTable inner join (wählen Sie t.colA, min (t.colC) als minColC aus abcTable als t group nach t.ColA) als minimumTable auf mainTable.colA = minimumTable.ColA und mainTable.colC = minimumTable.minColC Gruppe von mainTable.colA, mainTable.ColC –

0

Hier gehts!

with r1 as 
(select * 
,rank() over (partition by ColA order by ColC) fix 
from aba 
) 

select * from r1 where fix = 1 
+0

Versuchen Sind Sie sicher, dass MS Access suports 'RANK()'? – lad2025

+0

Ich glaube nicht, dass MSAccess 2007 dies unterstützt. – user2184214

+0

Menschen benutzen immer noch MS Access? Ich dachte, das war MS SQL Server. Es tut uns leid! – natec

Verwandte Themen