SQL Dynami c Pivot для некоторых столбцов - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать динамический c сводный код, в котором некоторые столбцы поворачиваются, а другие нет. В настоящее время у меня есть одна строка для каждой комбинации родитель-ребенок. Я хочу таблицу, в которой по одной строке для каждого родителя, со столбцами для child1, child2, et c. У некоторых родителей несколько детей, поэтому число столбцов (дочерних элементов) на одного родителя является динамическим c. У меня уже есть столбец, упорядочивающий детей по дате рождения, и я добавляю этот «номер ребенка» к дочерним столбцам.

Вот пример таблицы, с которой я начинаю: 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 Попытка кода сервера:

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' или есть дополнительные проблемы, такие как необходимость сначала отключиться. Любая помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...