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