我使用Ultralite 16.0,并试图将多个行聚合为一个行。
我有一个电影表和一个类型表,通过film_genre表有很多到多个关系。
我想要这样的结果:
| mFilm | idGenre |
| --------- | ------- |
| Film_One | 1, 2 |
| Film_Two | 1, 3, 4 |我可以在(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时,如下面的查询中所示
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;我得到语法错误
无法执行语句。“XML”SQL偏移量附近的UltraLite数据库语法错误: 57 SQLCODE=-131,ODBC 3 State="42000“行,第1列
我在文档中找不到对XML的任何引用,所以我不确定这在16.0版中是否可用。
我怎样才能做到这一点?
发布于 2022-07-10 23:36:16
如果其他人需要这样做,我所要做的就是使用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;https://stackoverflow.com/questions/72932553
复制相似问题