VBA SQL右联接-联接操作中出现语法错误
我试图在ExcelVBA中右键联接子查询,但一直出现语法错误。有人能发现吗VBA SQL右联接-联接操作中出现语法错误,sql,excel,vba,Sql,Excel,Vba,我试图在ExcelVBA中右键联接子查询,但一直出现语法错误。有人能发现吗 SELECT c.Category FROM [Catalogue Info] as c RIGHT JOIN ( SELECT [Product Code] FROM Orders WHERE JSID = 10503001 AND [Delivery Date] >= 04/12/2017 GROUP BY [Product Code] ) AS o ON c.code = o.[Product Code]
SELECT c.Category
FROM [Catalogue Info] as c
RIGHT JOIN (
SELECT [Product Code]
FROM Orders
WHERE JSID = 10503001
AND [Delivery Date] >= 04/12/2017
GROUP BY [Product Code]
) AS o ON c.code = o.[Product Code]
WHERE c.Brand='Brand'
AND c.Category<>''
GROUP BY c.Category
ORDER BY Avg(c.Page) Asc;
Excel 2016
视窗10
--编辑--
这是VBA中生成上述查询的实际代码
sqlProdList = " RIGHT JOIN" _
& " (SELECT [Product Code]" _
& " FROM Orders" _
& " WHERE JSID = " & customerRef _
& " AND [Delivery Date] >= " & Date - 365 _
& " GROUP BY [Product Code]) as o on c.code = o.[Product Code]"
sqlCategory = "SELECT c.Category" _
& " FROM [Catalogue Info] as c" _
& sqlProdList _
& " WHERE c.Brand='Brand'" _
& " AND c.Category<>''" _
& " GROUP BY c.Category" _
& " ORDER BY Avg(c.Page) Asc;"
这是表格的外观:
也许选择c类
将[Catalog Info]作为c输入c.code字段。我怀疑您想要的查询更像这样:
SELECT c.Category
FROM [Catalogue Info] as c LEFT JOIN
[Product Code]
o.Orders o
ON c.code = o.[Product Code] AND
o.JSID = 10503001 AND
[Delivery Date] >= '2017-04-12'
WHERE c.Brand = 'Brand' AND c.Category <> ''
GROUP BY c.Category
ORDER BY Avg(c.Page) Asc;
注:
这使用左连接。
它修复了日期格式。
它删除子查询。
日期值前后必须有符号
qlProdList = " RIGHT JOIN" _
& " (SELECT [Product Code]" _
& " FROM Orders" _
& " WHERE JSID = " & customerRef _
& " AND [Delivery Date] >=#" & Date - 365 _
& "# GROUP BY [Product Code]) as o on c.code = o.[Product Code]"
sqlCategory = "SELECT c.Category" _
& " FROM [Catalogue Info] as c " _
& sqlProdList _
& " WHERE c.Brand='Brand'" _
& " AND c.Category<>''" _
& " GROUP BY c.Category" _
& " ORDER BY Avg(c.Page) Asc;"
阅读OP上的注释以获取调试帮助。
问题在于日期格式。从Excel VBA传递到Access的问题查询为,[交付日期]>=2017年12月4日
Access将日期解释为数学,因此评估2017年4月12日,而不是将其视为日期字段
将DateAddd,-365,Date作为字符串传递到查询中,允许访问评估它自己的日期参数
最终工作代码
SQL
VBA
语法错误非常微妙-可能是这一行吗?和[Delivery Date]>=2017年12月4日我已经尝试了代码,有行和没有行,但仍然出现相同的错误。我也用其他查询尝试过这行代码,效果很好。如果是ODBC驱动程序出错,而不是VBA本身,那么我怀疑是您的日期文字,它应该是ANSI格式的YYYY-MM-DD,并由单引号包围,但与RDBMS相关。请改为尝试并[Delivery Date]>='&FORMATDate-365,yyyy mm dd&',如果VBA本身引发此错误,而不是RDBMS或ODBC驱动程序,则您必须共享更多代码,因为您共享的代码是100%良好的。@JNevill MS Access是RDBMS,因此我希望它使用与Excel相同的日期格式。格式化YYYY-MM-DD恐怕没有什么区别。如果这是您的意思,我已经尝试过此代码:从[Catalog Info]中选择c.code,c.Category,因为c会给出相同的语法错误。日期信息也必须用引号括起来。例如[交付日期]>=“2017年12月4日”
SELECT c.Category
FROM [Catalogue Info] as c
RIGHT JOIN (
SELECT [Product Code]
FROM Orders
WHERE JSID = 10503001
AND [Delivery Date] >= DateAdd("d", -365, Date())
GROUP BY [Product Code]
) AS o ON c.code = o.[Product Code]
WHERE c.Brand='Brand'
AND c.Category<>''
GROUP BY c.Category
ORDER BY Avg(c.Page) Asc;
sqlProdList = " RIGHT JOIN" _
& " (SELECT [Product Code]" _
& " FROM Orders" _
& " WHERE JSID = " & customerRef _
& " AND [Delivery Date] >= DateAdd('d', -365, Date())" _
& " GROUP BY [Product Code]) AS o ON (c.code = o.[Product Code])"
sqlCategory = "SELECT c.Category" _
& " FROM [Catalogue Info] as c" _
& sqlProdList _
& " WHERE c.Brand='Brand'" _
& " AND c.Category<>''" _
& " GROUP BY c.Category" _
& " ORDER BY Avg(c.Page) Asc;"