3

以下のこのシナリオを解決するためのクエリを作成する必要があります。

ParentTable:

ParentId  Name
1         Parent A
2         Parent B

ChildTable:

ChildId   ParentId  Name 
10        1         Child X
11        1         Child Y
12        1         Child Z
13        2         Child Q

単一の親を複数の子にリンクできる場合。クエリは次の結果を返します。

Parent Name    1st-Child   2nd-Child   3rd-Child  4th-Child  5th-Child  
Parent A       Child X     Child Y     Child Z
Parent B       Child Q

これはMSSQL2008で可能ですか?

4

2 に答える 2

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
于 2012-04-16T20:12:46.513 に答える
3

PIVOTあなたのシナリオのために設計されました。

SELECT * FROM
(
    SELECT [Parent] = P.Name,
        [Child] = C.Name, 
        [Field] = 'Child ' + LTRIM(STR(
        ROW_NUMBER() OVER (PARTITION BY C.ParentId ORDER BY C.ChildId)))
    FROM ChildTable C
    JOIN ParentTable P ON P.ParentId = C.ParentId
) A
PIVOT (MAX([Child])
       FOR [Field] IN ([Child 1], [Child 2], [Child 3], [Child 4], [Child 5])) B
于 2012-04-18T21:09:23.540 に答える