【发布时间】:2017-05-17 21:30:28
【问题描述】:
我想知道是否有可能在每行的一列中返回多个结果,或者是在一列中获得多个结果的最佳方式。
例如,如果您有一个将返回多个学生的存储过程,但学生表中的一列是照片 ID。一个学生可以有几张照片,但是这个存储过程需要返回每个学生的所有三个照片 ID。
SELECT
S.Name AS Name,
(SELECT S.Id FROM COURSES WHERE P.StudentId = S.Id) AS PhotoId
FROM
PHOTOS P
INNER JOIN
PHOTOS P ON P.StudentId = S.Id
上面的例子不起作用,但我需要知道什么是最好的方法。由于图片的最大数量设置为 3,我想在单独的列中创建每个照片 ID,如下所示。
SELECT
S.Name AS Name,
(SELECT TOP 1 S.Id FROM COURSES WHERE P.StudentId = S.Id) AS PhotoId1,
(SELECT TOP 2 S.Id FROM COURSES WHERE P.StudentId = S.Id) AS PhotoId2,
(SELECT TOP 3 S.Id FROM COURSES WHERE P.StudentId = S.Id) AS PhotoId3
FROM
PHOTOS P
INNER JOIN
PHOTOS P ON P.StudentId = S.Id
在这种情况下,只有第一行有效。而不是使用TOP 2 和TOP 3 相当于只取第二个和第三个结果(与Linq Take(1) 和Skip(1) 相同)。
或者有更好的方法吗?此外,我必须确保每个学生只返回一次,即使他们有多个图像
【问题讨论】:
标签: sql sql-server stored-procedures