我正在尝试在Excel VBA中右联接子查询,但是我一直收到语法错误。谁能看到它?
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年 Windows 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;"
这是表格的样子:
答案 0 :(得分:0)
我怀疑您想要的查询更像这样:
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;
注意:
LEFT JOIN
。答案 1 :(得分:0)
日期值之前必须带有#号。
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;"
答案 2 :(得分:0)
问题在于日期格式。从Excel VBA传递到Access的问题查询为AND [Delivery Date] >= 04/12/2017
Access会将日期解释为数学,因此对2017年4月12日进行评估,而不是将其视为日期字段。
将DateAdd("d", -365, Date())
作为字符串传递给查询是为了允许Access评估它自己的日期参数。
SQL
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;
VBA
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;"
答案 3 :(得分:-1)
也许是“ SELECT c.Category 从[Catalog Info]作为c“进入c.code字段。