Я пытаюсь повернуть таблицу по позициям X и Y. Таблица имеет формат, аналогичный приведенному ниже.
Каждая строка имеет значение, соответствующее ее положению строки и столбца. «AThing» и «FileName» следует игнорировать в наборе данных.
Итак, если бы это было развернуто, мы бы получили:
Я пытался какое-то время, но не могу понять это, есть идеи?
Обновлено: количество полей является динамическим для «FileName». Мне удалось извлечь имена столбцов, но не данные, используя:
-- Construct List of Columns to Pivot
SELECT @PivotCols =
STUFF(
(SELECT ',' + QUOTENAME(FieldName)
FROM #Data
GROUP BY ColPos, FieldName
ORDER BY ColPos ASC
FOR XML PATH(''),TYPE).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @PivotQuery =
SELECT ' + @PivotCols + N'
FROM
(
SELECT ColPos, FieldName
FROM #Data
GROUP BY ColPos, FieldName
) x
PIVOT
(
MIN(ColPos)
FOR FieldName IN (' + @PivotCols + N')
) p'
EXEC sp_executesql @PivotQuery


Пожалуйста, попробуйте этот код:
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns += N', p.' + QUOTENAME(FieldName)
FROM (SELECT distinct p.FieldName FROM Tablename AS p
) AS x;
SET @sql = N'
SELECT ' + STUFF(@columns, 1, 2, '') + '
FROM
(
SELECT p.Value, p.FieldName, p.RowPos
FROM Tablename AS p
) AS j
PIVOT
(
MAX(Value) FOR FieldName IN ('
+ STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '')
+ ')
) AS p;';
PRINT @sql;
EXEC sp_executesql @sql;
Хорошо. Я обновлю свой вопрос для имен динамических полей.
Спасибо за код, просто попробовал, и столбцы кажутся правильными, однако я получаю только одну строку с неправильными значениями (FieldA = 700, FieldB = 800, FieldC = 900)
Можете ли вы попробовать другую агрегатную функцию, например min или count.
Использование MIN дает 100,200,300 в правильном порядке, но по-прежнему возвращает только одну строку данных.
@JamieStuartRobinParsons, проверьте обновленный ответ. RowPos должен быть указан в операторе выбора
Теперь работает отлично, ответ отмечен как правильный. Спасибо за помощь.
Количество столбцов будет варьироваться в зависимости от того, к какому «файлу» принадлежат данные. С помощью PIVOT мне удалось извлечь имена столбцов, но не данные