ProvideX/Sage 具有 GROUP BY 和列别名的 ODBC 驱动程序
ProvideX/Sage ODBC Driver with GROUP BY and Column Alias
场景:
- 贤者 100 ERP
- ProvideX ODBC 驱动程序(32 位)
- 包含列别名和 GROUP BY 语句的标准 SQL 语句。
评论:
我们在标准 Sage 100 ERP 环境中使用 PVX/Sage ODBC 连接器。否则驱动程序正常工作。
示例:
1. 简单的列别名
SELECT InvoiceDate as TheColumn,
SUM(NonTaxableSalesAmt) as Total
FROM AR_InvoiceHistoryHeader
WHERE InvoiceDate <= {d[startdate]} AND InvoiceDate >= {d[enddate]}
GROUP BY TheColumn
2.计算列别名
SELECT {fn MONTH(InvoiceDate)} as TheColumn,
SUM(NonTaxableSalesAmt) as Total
FROM AR_InvoiceHistoryHeader
WHERE InvoiceDate <= {d[startdate]} AND InvoiceDate <= {d[enddate]}
GROUP BY TheColumn
3. 按计算分组
SELECT {fn MONTH(InvoiceDate)} as TheColumn,
SUM(NonTaxableSalesAmt) as Total
FROM AR_InvoiceHistoryHeader
WHERE InvoiceDate <= {d[startdate]} AND InvoiceDate <= {d[enddate]}
GROUP BY {fn MONTH(InvoiceDate)}
结果:
- 错误 [S0000] [ProvideX][ODBC 驱动程序]未找到列:TheColumn
- 错误 [S0000] [ProvideX][ODBC 驱动程序]未找到列:TheColumn
- 错误 [37000] [ProvideX][ODBC 驱动程序]未找到预期的词法元素:(空白)
总结:
- 这是 ProvideX 驱动程序的错误,还是我的 SQL 查询的错误?
- 对于这种情况是否有任何已知的解决方法?
澄清:我不是专门为这个确切的用例寻找解决方案,而是针对列 Alias/GROUP BY 组合的通用解决方案。
在与 Sage 和 ProvideX 进行了长时间的交流之后,这里是使用 Sage MAS 100 ERP 连接器进行 GROUP BY 的结论:ProvideX 文档对于 Sage 驱动程序不准确,因为部分自定义智者。与 Sage MAS 100 ERP 一起使用的 ODBC 驱动程序不支持带有 GROUP BY 语句的别名或函数。 GROUP BY 语句必须采用 GROUP BY [实际列].
的形式
另一种解决方法是使用简单查询(SELECT 不使用 GROUP BY),并且 1) 在您的应用程序中执行 GROUP BY 操作或 2) 将数据导入 Microsoft Access 或其他 DBMS 作为传递查询,并在 Access 中执行复杂查询。
场景:
- 贤者 100 ERP
- ProvideX ODBC 驱动程序(32 位)
- 包含列别名和 GROUP BY 语句的标准 SQL 语句。
评论:
我们在标准 Sage 100 ERP 环境中使用 PVX/Sage ODBC 连接器。否则驱动程序正常工作。
示例:
1. 简单的列别名
SELECT InvoiceDate as TheColumn,
SUM(NonTaxableSalesAmt) as Total
FROM AR_InvoiceHistoryHeader
WHERE InvoiceDate <= {d[startdate]} AND InvoiceDate >= {d[enddate]}
GROUP BY TheColumn
2.计算列别名
SELECT {fn MONTH(InvoiceDate)} as TheColumn,
SUM(NonTaxableSalesAmt) as Total
FROM AR_InvoiceHistoryHeader
WHERE InvoiceDate <= {d[startdate]} AND InvoiceDate <= {d[enddate]}
GROUP BY TheColumn
3. 按计算分组
SELECT {fn MONTH(InvoiceDate)} as TheColumn,
SUM(NonTaxableSalesAmt) as Total
FROM AR_InvoiceHistoryHeader
WHERE InvoiceDate <= {d[startdate]} AND InvoiceDate <= {d[enddate]}
GROUP BY {fn MONTH(InvoiceDate)}
结果:
- 错误 [S0000] [ProvideX][ODBC 驱动程序]未找到列:TheColumn
- 错误 [S0000] [ProvideX][ODBC 驱动程序]未找到列:TheColumn
- 错误 [37000] [ProvideX][ODBC 驱动程序]未找到预期的词法元素:(空白)
总结:
- 这是 ProvideX 驱动程序的错误,还是我的 SQL 查询的错误?
- 对于这种情况是否有任何已知的解决方法?
澄清:我不是专门为这个确切的用例寻找解决方案,而是针对列 Alias/GROUP BY 组合的通用解决方案。
在与 Sage 和 ProvideX 进行了长时间的交流之后,这里是使用 Sage MAS 100 ERP 连接器进行 GROUP BY 的结论:ProvideX 文档对于 Sage 驱动程序不准确,因为部分自定义智者。与 Sage MAS 100 ERP 一起使用的 ODBC 驱动程序不支持带有 GROUP BY 语句的别名或函数。 GROUP BY 语句必须采用 GROUP BY [实际列].
的形式另一种解决方法是使用简单查询(SELECT 不使用 GROUP BY),并且 1) 在您的应用程序中执行 GROUP BY 操作或 2) 将数据导入 Microsoft Access 或其他 DBMS 作为传递查询,并在 Access 中执行复杂查询。