Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA SQL右联接-联接操作中出现语法错误_Sql_Excel_Vba - Fatal编程技术网

VBA SQL右联接-联接操作中出现语法错误

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]

我试图在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]

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;"