0

一部の列がピボットされ、他の列がピボットされない動的なピボット コードを作成しようとしています。現在、親子の組み合わせごとに1行あります。親ごとに1行で、child1、child2などの列があるテーブルが必要です。一部の親には複数の子があるため、親ごとの列(子)の数は動的です。すでに生年月日で子供を並べる列があり、この「子番号」を子列に追加しています。

これが私が始めているサンプルテーブルです: http://sqlfiddle.com/#!18/990f6/2

+===============+===========+-=============+=============+================+=============+==============+
|    parent     | parentage | parentgender |  childname  | childbirthdate | childgender | childnumber  |
+===============+===========+==============+=============+================+=============+==============+
| John Smith    |        32 | M            | Jane Smith  | 2005-05-21     | F           |            1 |
| John Smith    |        32 | M            | Billy Smith | 2010-01-01     | M           |            2 |
| Katherine Doe |        40 | F            | Drew Fine   | 2015-08-09     | M           |            1 |
| Paula Lee     |        28 | F            | Peter Lee   | 2009-12-30     | M           |            1 |
| Paula Lee     |        28 | F            | Tim Lee     | 2013-10-15     | M           |            2 |
| Paula Lee     |        28 | F            | Andrew Lee  | 2014-06-27     | M           |            3 |
+---------------+-----------+--------------+-------------+----------------+-------------+--------------+                          

最終結果は次のようになります。

+===============+===========+==============+============+=================+==============+=============+=================+==============+============+=================+===============+
|    parent     | parentage | parentgender | childname1 | childbirthdate1 | childgender1 | childname2  | childbirthdate2 | childgender2 | childname3 | childbirthdate3 | childgender3  |
+===============+===========+==============+============+=================+==============+=============+=================+==============+============+=================+===============+
| John Smith    |        32 | M            | Jane Smith | 2005-05-21      | F            | Billy Smith | 2010-01-01      | M            | null       | null            | null          |
| Katherine Doe |        40 | F            | Drew Fine  | 2015-08-09      | M            | null        | null            | null         | null       | null            | null          |
| Paula Lee     |        28 | F            | Peter Lee  | 2009-12-30      | M            | Tim Lee     | 2013-10-15      | M            | Andrew Lee | 2014-06-27      | M             |
+---------------+-----------+--------------+------------+-----------------+--------------+-------------+-----------------+--------------+------------+-----------------+---------------+

私のSQL Serverコードの試み:

IF OBJECT_ID('finaltable', 'U') IS NOT NULL DROP TABLE finaltable

DECLARE @columns AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)

SELECT @columns = STUFF((SELECT DISTINCT ',' + QUOTENAME(col + '_' + CAST(childnumber as varchar(50)))
FROM
  families
FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1,'')

SET @query = 'SELECT parent, ' + @columns + '  
             FROM (
                SELECT parent, parentage, parentgender, num = col+''_''+ CAST(childnumber as varchar(50)) 
                FROM (
                    SELECT parent, childnumber, childname, childbirthdate, childgender
                    FROM families
                    ) AS x
            ) AS source
            PIVOT
            (
                MAX(childnumber)
                FOR num in (' + @columns + ')
            ) AS pvt '

execute(@query);

このクエリを実行できません。問題が 'col' の定義にあるのか、最初にピボットを解除する必要があるなどの追加の問題があるのか​​ わかりません。どんな助けでも大歓迎です。

4

0 に答える 0