T-SQL查询:展平表格

Joh*_*ohn 3 t-sql sql-server-2008

我需要构建一个查询来解决下面的这种情况:

ParentTable:

ParentId  Name
1         Parent A
2         Parent B
Run Code Online (Sandbox Code Playgroud)

ChildTable:

ChildId   ParentId  Name 
10        1         Child X
11        1         Child Y
12        1         Child Z
13        2         Child Q
Run Code Online (Sandbox Code Playgroud)

单个父母可以链接到多个孩子的地方.然后查询将给出以下结果:

Parent Name    1st-Child   2nd-Child   3rd-Child  4th-Child  5th-Child  
Parent A       Child X     Child Y     Child Z
Parent B       Child Q
Run Code Online (Sandbox Code Playgroud)

这在MS SQL 2008中是否可行?

Cha*_*had 6

假设您只需要列出5个孩子,此查询将起作用:

with T as (
    select P.Name as ParentName,
           C.Name as ChildName,
           row_number() over (partition by P.ParentId order by C.ChildId) as N
    from ParentTable P join ChildTable C on P.ParentId = C.ParentId
) 
select ParentName,
    max(case when N = 1 then ChildName else '' end) as '1st-child',
    max(case when N = 2 then ChildName else '' end) as '2nd-child',
    max(case when N = 3 then ChildName else '' end) as '3rd-child',
    max(case when N = 4 then ChildName else '' end) as '4th-child',
    max(case when N = 5 then ChildName else '' end) as '5th-child'
from T
group by ParentName
Run Code Online (Sandbox Code Playgroud)