Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将多个子记录ID输出到一行_Sql_Sql Server 2008 - Fatal编程技术网

Sql 将多个子记录ID输出到一行

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,

我一直在寻找一种方法,将多个子记录放在一行中,多个列包含每个记录的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, [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。这非常有效。。。再次感谢你,我已经绞尽脑汁好几个小时了。