我有一个存储多行的表,每行声明一个点(x,y)。每行引用模式中的下一个点,因此检索整个模式的查询是通过链表结构递归定义的。我开发了一个 rCTE 来检索一个看起来像这样的完整结构......
WITH list (id, next, x, y) AS (
-- rCTE anchor expression
SELECT id, next, x, y
FROM POINT
WHERE id = @id
UNION ALL
-- rCTE recursive expression
SELECT POINT.id, POINT.next, POINT.x, POINT.y
FROM POINT
INNER JOIN list ON POINT.id = list.next)
SELECT x, y FROM list
此外,我还有另一个表,它引用了存储在上述表中的每个模式的起点。
最终目标是开发一个查询,该查询将返回一个二维结果,其中每个模式的所有点都合并到一个逗号分隔的列表中。这个返回值看起来像这样:
id | name | points
-----------------------
1 | test | 1,2,1,3,1,4
(点中的奇数索引是 x,偶数索引是 y。)
现在实现这一点的简单解决方案是循环父表并为每个父表行设置@id
并运行 rCTE。那会奏效,我已经有了一个粗略的实现,但我不喜欢这个解决方案。有没有更好、更“SQL”的方式来实现这个目标?