提问人:Marianne Rojas 提问时间:7/11/2022 更新时间:7/11/2022 访问量:19
SQLAnywhere 16 中的聚合结果(用于 XML 替换)
Aggregate results in SQLAnywhere 16 (For XML replacement)
问:
我正在使用 Ultralite 16.0 并尝试将多行聚合为一行。
我有一个电影表和一个类型表,它们通过film_genre表具有多对多的关系。
我想要这样的结果:
| mFilm | idGenre |
| --------- | ------- |
| Film_One | 1, 2 |
| Film_Two | 1, 3, 4 |
我可以在 SQL Server Management Studio (SSMS) 中轻松执行此操作
SELECT f.nmFilm,
(
REPLACE(
STUFF(
(SELECT g.idGenre FROM genre g
JOIN film_genre fg on g.idGenre = fg.idGenre
WHERE fg.idFilm = f.idFilm
FOR XML PATH('')
) , 1 , 1 , ''
)
, '&', '&')
) AS genres FROM film f;
但是,每当我尝试在 SQLAnywhere 中使用 FOR XML 时,例如在下面的查询中
SELECT f.nmFilm,
(SELECT g.idGenre FROM genre g
JOIN film_genre fg on g.idGenre = fg.idGenre
WHERE fg.idFilm = f.idFilm
FOR XML AUTO
) AS genres FROM film f;
我收到语法错误
无法执行语句。 [UltraLite 数据库]“XML”附近的语法错误 [SQL 偏移量:57] SQLCODE=-131,ODBC 3 状态=“42000” 第 1 行,第 1 列
我在文档中找不到任何对 FOR XML 的引用,因此我不确定这是否在 16.0 版中可用。
我怎样才能做到这一点?
答:
0赞
Marianne Rojas
7/11/2022
#1
如果其他人需要这个,我所要做的就是使用 LIST() 函数。
SELECT f.nmFilm,
(SELECT LIST(g.idGenre) FROM genre g
JOIN film_genre fg on g.idGenre = fg.idGenre
WHERE fg.idFilm = f.idFilm
) AS genres
FROM film f;
评论