SQL Transpose Pivot? UNPIVOT?

时间:2016-11-15 23:02:41

标签: sql-server

我有一个表名table1

Partnumber | Model    
12345      | A1    
12345      | B2    
12345      | C3

我希望我的输出为:

Partnumber | Model1 | Model2 | Model3    
12345      | A1     | B2     | C3

模型列N是动态的。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用动态条件聚合:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql = 
'SELECT
    PartNumber' + CHAR(10) +
    STUFF((
        SELECT DISTINCT
            '   ,MAX(CASE WHEN Model = ''' + Model + ''' THEN Model END) AS ' + QUOTENAME(Model) + CHAR(10)
        FROM Tbl
        FOR XML PATH('')
    ), 1, 0, '') +
'FROM Tbl
GROUP BY PartNumber;';

PRINT @sql;
EXEC sp_executesql @sql;