【发布时间】:2021-06-06 07:10:30
【问题描述】:
我有一个托管在 Microsoft Azure 上的 SQL Server 数据库,并以 MS Access 作为前端。我在 SSMS 18.8 中编写了如下查询
SELECT p.Full_Citation AS [Full Citation], p.Reference, p.StudyID AS [Study ID], t.RefID AS [Database Reference], p.Primary_Secondary_Source AS [Primary/Secondary], p.Linked_Publications AS [Linked Publications],
p.Publication_Type AS [Publication Type], STRING_AGG(STUFF(COALESCE(' ' + Trial_Name, '') + COALESCE(' ' + Trial_Number, ''), 1, 1, ''), ', ') AS Trials
FROM FTS_Trials t
INNER JOIN Papers p
ON p.RefID = t.RefID
WHERE p.Project = 'TST_TST_1'
GROUP BY p.Full_Citation, p.Reference, p.StudyID, t.RefID, p.Primary_Secondary_Source, p.Linked_Publications, p.Publication_Type;
这会产生以下输出:
| Full Citation | Reference | Study ID | Database Reference | Primary/Secondary | Linked Publications | Publication Type | Trials | |
|---|---|---|---|---|---|---|---|---|
| 1 | NULL | NULL | Testing (2021) | TST_TST_1-1-Testing (2021) | NULL | NULL | NULL | 85, Example, Test 1 |
| 2 | NULL | NULL | Testing (2019) | TST_TST_1-2-Testing (2019) | NULL | NULL | NULL | Test 2 |
我遇到的问题是,当我尝试在 MS Access 中查询的 SQL 视图中运行此代码时,会出现“表达式中的未定义函数 'STRING_AGG'。”。谁能解释一下为什么这在 SSMS 中有效,但在 Access 中无效?我是否遗漏了一些明显的东西?
我还尝试了一种仅使用 STUFF() 函数的不同方法,其方式与此问题 T-SQL Concatenate & group multiple rows into a single row 的第一个答案类似。同样,这在 SSMS 中工作正常,但 MS Access 告诉我语法中存在查询错误。此外,此查询没有像上面那样结合 Trial_Name 和 Trial_Number。我可以使用 MS Access 采取其他方法吗?
对于一些背景知识,查询将附加到用户单击的按钮上,理想情况下需要显示查询,然后将其导出到 Excel 文件。我已经为其他查询设置了这个,但是想要将给定引用的所有试验(Trial_Name + Trial_Number)连接在一行中,这使得这个场景更难解决。
【问题讨论】:
-
MS Access 没有
string_agg()、stuff()或任何对此特别有用的东西。我的建议是更改数据库。也就是说,您可以在线找到字符串聚合 VBA 函数。 -
使用传递查询。在那里您可以使用 SQL Server 语法和功能。
-
@Andre 非常感谢这一切都很好!
-
@GordonLinoff 访问只是这里的前端,这种情况可能是通过开始使用 Access 作为数据库,设计所有表单和报告等,然后意识到它是一个不可扩展的带有锁定的粪便问题比比皆是,所以换成前端更好的后端数据库..
标签: sql sql-server vba ms-access