0

我正在尝试在 X 和 Y 位置上旋转表格。该表的格式类似于下面。

每行都有一个与其行和列位置相关的值。在数据集中将忽略“AThing”和“文件名”。

在此处输入图像描述

因此,如果这是旋转的,我们将得到:

在此处输入图像描述

我已经尝试了一段时间,但似乎无法弄清楚,有什么想法吗?

编辑:每个“文件名”的字段数是动态的。我设法使用以下方法提取列名而不是数据:

-- 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
4

1 回答 1

2

请尝试以下代码:

 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;
于 2018-04-27T18:54:41.910 回答