SQL - поворот на значениях столбца и строки - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь повернуть таблицу на позиции X и Y. Таблица в формате, аналогичном приведенному ниже.

У каждой строки есть значение, относящееся к ее позиции в строке и столбце.'AThing 'и' FileName 'должны игнорироваться в наборе данных.

enter image description here

Так что, если бы это было развернуто, мы получили бы:

enter image description here

Я пытался какое-то время, но не могу понять, какие-нибудь идеи?

РЕДАКТИРОВАТЬ: Количество полей являются динамическими для «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

1 Ответ

0 голосов
/ 27 апреля 2018

Пожалуйста, попробуйте этот код:

 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;
...