我正在使用MSSQL 2012,我正在尝试弄清楚如何在一列中使用父值和在另一列中使用子值,并将其合并到一列中,而父级仅在一行中显示相应的孩子在它下面显示。使用row_number()/ partition进行练习并不富有成效。
我怎样才能实现这一目标?
感谢。
set nocount on
declare @parchi table ( parenttext varchar(20) , childtext varchar(20) )
insert into @parchi values ( 'parenta' , 'childa' )
insert into @parchi values ( 'parenta' , 'childc' )
insert into @parchi values ( 'parenta' , 'childb' )
insert into @parchi values ( 'parentb' , 'child1' )
insert into @parchi values ( 'parentb' , 'child3' )
insert into @parchi values ( 'parentb' , 'child2' )
select childtext,ROW_NUMBER() over (partition by parenttext order by parenttext,childtext) as tempordnum from @parchi
-- below is shape of the result set. what i came up with does not include the parent at the top of each grouping set (pun intentional(.
parenta
childa
childb
childc
parentb
child1
child2
child3
答案 0 :(得分:1)
尝试这个建议:
您将需要分别选择父项和子项,然后您将UNION两者选择。
选择父级,并使用row_number创建父级ID(parenta id = 1,parent b id = 2)
选择子项,并根据parenttext字段使用dense_rank。这将给孩子一个id(childa - childc将id = 1,child1-3将id = 2)
结合结果,你会得到你想要的东西
答案 1 :(得分:1)
你可以这样做。它首先得到父母,并为每一个人分配一个等级。然后它得到孩子并再次指定父级别加上孩子级别。最后,它从按父订单排序的联合获得结果,然后是子订单。
您可以在ORDER BY
的{{1}}部分添加其他列,以进一步对儿童进行排序。
DENSE_RANK()