2017-08-26 130 views
0

我有以下表中的列和值...MSACCESS 2007 SQL复杂查询

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 

我需要以下结果集:

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

从本质上讲,这是COLC其中最低值ColA是一样的。所以b的最低值是1,它出现在两行中。所有p的最小值是5,所有o的最小值是3. ColB是在另一个表上加入的值。所以我确实需要一个查询来加入ColB上的另一个表。

谢谢。

回答

1

尝试这个

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

这样做!谢谢开斋节! – user2184214

+0

Eid - 我不再需要第二个'b'结果行。我只想要ColA分组的行,ColC值最低;如果有领带,那么最高的ColB决定领带。如果他们绑在ColC和ColB上,那么只返回一行,我不在乎哪个。你能做到吗? – user2184214

+0

从abcTable中选择不同的mainTable.colA,max(mainTable.ColB),mainTable.ColC作为mainTable内部加入 (从tcColA中选择tCcolA,min(t.colC)作为minColC作为t group by t.ColA)作为minimumTable mainTable.colA上的 = minimumTable.ColA和mainTable.colC = minimumTable.minColC group by mainTable.colA,mainTable.ColC –

0

你在这里!

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

select * from r1 where fix = 1 
+0

确定的MS Access suports'RANK()'? – lad2025

+0

我不认为MSAccess 2007支持这一点。 – user2184214

+0

人们仍然使用MS Access?我认为这是MS SQL Server。抱歉! – natec