SQL查询 - ORDER BY

时间:2015-03-16 20:24:00

标签: mysql excel excel-vba vba

rs.Open "SELECT [A$].Security,[A$].Name,SUM([A$].[Price]) FROM [A$] INNER JOIN [B$] ON [A$].Security = [B$].ID GROUP BY [A$].Security,[A$].Description", cn, adOpenKeyset, adLockReadOnly

我从此查询中获得的结果未与表B中的相应ID对齐或匹配。例如: - A是主工作表,我从中汇总了与B的ID和A的安全性相匹配的记录。现在,A可能有多个B的ID具有不同价格的实例,这就是我聚合的原因。我的问题是,当我粘贴记录集数据时,我看到聚合的价格值没有粘贴在B中的ID前面,即我希望它们根据B中的ID进行排序,而ORDER BY也没有。 t work,抛出[B $] .ID不是聚合函数的一部分。有人可以提示如何做到这一点吗?

1 个答案:

答案 0 :(得分:0)

请改为尝试:

rs.Open "SELECT [B$].ID, [A$].Name, SUM([A$].[Price]) FROM [B$] LEFT JOIN [A$] ON [B$].ID = [A$].Security GROUP BY [B$].ID, [A$].Name", cn, adOpenKeyset, adLockReadOnly

这应该为您提供B中每个ID的总价格,并且将包括来自B的ID,其中A中没有条目.SELECT子句中的每个非聚合列都必须出现在GROUP BY子句中,因为您是选择ID和Name,这两者都在GROUP BY子句中。如果同一个ID有多个名称,那么这将无法正常工作,因为您将获得每个ID多行。

维护与B中的条目相同的顺序是不可能的,除非您按照ADO使用的自然排序顺序对B进行排序,或者在B中添加可以在ORDER BY子句中使用的附加列