【发布时间】:2015-09-24 00:08:56
【问题描述】:
我正在编写一个允许用户从列表框中选择客户的子程序。选择记录为 CustomerID(整数变量)并用于查询 Access 数据库文件。然后,子应将有关指定客户的销售信息输出到 Excel 工作表,特别是:
- 订购日期
- 订单编号
- 总订单成本(定义为售出数量 * 售出价格)
访问文件有 3 个我需要的表:Customers、Orders、LineItems
我下面的代码应该将客户 ID 连接到订单 ID 字段,然后将其与订单 ID 连接起来,并将订单 ID 连接到订单项上。
' Define SQL statement to get order info for selected product.
SQL = "SELECT O.OrderDate, COUNT(O.OrderID), SUM(L.QuantityOrdered * L.QuotedPrice) AS [TotalCost] " _
& "FROM (((Customers C INNER JOIN Orders O ON C.CustomerID = O.CustomerID) " _
& "INNER JOIN ON O.OrderID = O.CustomerID) INNER JOIN LineItems L " _
& "ON O.OrderID = L.OrderID)" _
& "WHERE O.CustomerID =" & CustomerID & " " _
& "GROUP BY O.OrderDate, O.OrderID" _
& "ORDER BY O.OrderDate"
我不断收到“FROM 子句中的语法错误”。我的 JOIN 语句是否正确?我玩过(),“”等但没有成功。我已经检查并且表名称是正确的(订单、客户、LineItems)字段名称也拼写正确。
【问题讨论】:
-
ON子句和WHERE之间或 group by 和 order by 之间没有空格。 -
您不想将 orderid 加入 customerid ......这些是不匹配的不同 ID。只需删除该部分。此外,语法无论如何都不起作用。你不能做 INNER JOIN ON....你需要在 INNER JOIN 和 ON 之间放一个表。如果您想使用两个字段进行连接,则语法为“...C INNER JOIN Orders O ON C.CustomerID = O.Customer ID AND C.CustomerID = O.OrderID” 同样,我怀疑这实际上是您想要。
-
感谢 OpiesDad,所以我应该创建一张桌子来容纳我需要的东西吗?我看不出答案那么复杂。你也是对的,我不认为我想加入使用两个字段。你能建议一些方向吗?我不明白为什么我不能将 OrderID 与 CustomerID 关联起来?它们确实有不同的值,但在“订单”表中,订单 ID 是主键,客户 ID 是外键。这似乎是最好的路线,因为表“ListItems”没有 CustomerID 作为外键。 (ListItems 有输出所需的订单详情)
-
见下面的答案。 OrderID 已经与 CustomerID 相关,因为它们都在 Order Table 中。所以每条记录都有一个与它们相关的记录。 ListItems 将 OrderID 作为外键,因此通过 Order 表链接到 customerID。
-
尝试将
debug.print sql直接放在它下面并检查VBE 的即时窗口(Ctrl+G)以查看您制作的内容。将其粘贴到空白的 Access 查询中并进行修改,直到它起作用,然后将更改传输回字符串构造并重新测试。
标签: mysql sql-server vba excel