Sql 将多个子记录ID输出到一行
我一直在寻找一种方法,将多个子记录放在一行中,多个列包含每个记录的GUID 下面是表格的外观:Sql 将多个子记录ID输出到一行,sql,sql-server-2008,Sql,Sql Server 2008,我一直在寻找一种方法,将多个子记录放在一行中,多个列包含每个记录的GUID 下面是表格的外观: StudentParentID StudentID ParentID 1 2 1 2 3 1 3 4 2 5.2.5 我想要的是这样的结果集: StudentID ParentID1 ParentID2 ParentID3 1 12 3 2 4 5(空) 我正在使用SQLServer2008。谢谢你的帮助 您可以使用pivot和rank: select StudentID, [1] as P1,
StudentParentID StudentID ParentID
1
2 1 2
3 1 3
4 2
5.2.5
我想要的是这样的结果集:
StudentID ParentID1 ParentID2 ParentID3
1 12 3
2 4 5(空)
我正在使用SQLServer2008。谢谢你的帮助 您可以使用pivot和rank:
select StudentID, [1] as P1, [2] as P2, [3] as P3 from (
select StudentID, ParentID, RANK() over (PARTITION BY StudentID ORDER BY ParentID) as rnk
from STUDENT_PARENTS
) ranked PIVOT (min(ParentID) for rnk in ([1], [2], [3])) as p
请在SqlFiddle上查看:
如果您使用的是guid,则需要将它们转换为二进制文件才能使用min():
SQLFIDLE here:您可以使用pivot和rank:
select StudentID, [1] as P1, [2] as P2, [3] as P3 from (
select StudentID, ParentID, RANK() over (PARTITION BY StudentID ORDER BY ParentID) as rnk
from STUDENT_PARENTS
) ranked PIVOT (min(ParentID) for rnk in ([1], [2], [3])) as p
请在SqlFiddle上查看:
如果您使用的是guid,则需要将它们转换为二进制文件才能使用min():
SqlFiddle here:我正在使用guid(我使用整数使其更容易解释-对不起),我在min()附近遇到了一个错误。。。还有其他运算符可以使用吗?请参阅我的更新,您可以将uniqueidentifier强制转换为二进制以解决最小问题注意,即使我在SqlFiddle中仅将ParentID切换为uniqueidentifier,您也应该能够将其他列更改为uniqueidentifier。这非常有效。。。再次感谢,我已经绞尽脑汁几个小时了。我正在使用guid(我使用整数使其更容易解释-对不起),我在min()附近遇到了一个错误。。。还有其他运算符可以使用吗?请参阅我的更新,您可以将uniqueidentifier强制转换为二进制以解决最小问题注意,即使我在SqlFiddle中仅将ParentID切换为uniqueidentifier,您也应该能够将其他列更改为uniqueidentifier。这非常有效。。。再次感谢你,我已经绞尽脑汁好几个小时了。