例如,我有两个这样的表:
Table Parent
+===========+==============+
| FirstName | (PK)LastName |
+===========+==============+
| Bob | Newbie |
| Bella | Goth |
+===========+==============+
Table Child
+===========+==============+
| FirstName | (FK)LastName |
+===========+==============+
| Cassandra | Goth |
| Cindy | Newbie |
| Mortimer | Goth |
+===========+==============+
如何获得这样的SELECT结果:
+========+============+=====================+
| Family | ParentName | ChildName |
+========+============+=====================+
| Goth | Bella | Cassandra, Mortimer |
| Newbie | Bob | Cindy |
+========+============+=====================+
到目前为止我尝试了什么
SELECT
A.LastName Family,
A.FirstName ParentName,
(
SELECT
COALESCE(B.FirstName + ',' , '') + B.FirstName
FROM
Child B
WHERE
B.LastName = A.LastName
) ChildName
FROM
Parent A
ORDER BY
Family ASC
但是当我执行它时显示
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
任何想法?
答案 0 :(得分:2)
这里的标准方法是使用一些XML
技巧:
select *, STUFF((SELECT ',' + FirstName
FROM child where LastName = p.LastName
FOR XML PATH('')), 1, 1, '')
from parent p
答案 1 :(得分:1)
在这种情况下,您不需要使用子查询,只需要使用内部联接。 尝试使用类似的东西:
SELECT
A.LastName Family,
A.FirstName ParentName,
COALESCE(B.FirstName + ',' , '') + B.FirstName ChildName
FROM
Parent A
INNER JOIN Child B on A.LastName = B.LastName
ORDER BY
A.Family ASC