>我有这样的表格:
Factory indexcode grade
200 1 95
200 2 100
5000 1 85
5000 3 90
我怎样才能得到这个结果?
Factory. 1 2 3
200 95 100 -
5000 85 - 90
indexcode
在 1 到 6 之间变化。
您可以在下面尝试 -
select factorycode,pv.*
from tablename
pivot
(max(grade) for indexcode in ([1],[2],[3])) as pv
如果您的indexcodes
是固定的 (1-6),在这种情况下,您可以使用以下 PIVOT 查询。
SELECT *
FROM TABLE_NAME
PIVOT ( Max(grade)
FOR indexcode IN ( [1], [2], [3],[4],[5],[6]) ) pvt
如果您的索引代码值不是固定的并且可以采用任何值,在这种情况下,您可以使用动态透视,如下所示。
DECLARE @cols AS NVARCHAR(max) = Stuff((SELECT DISTINCT ', ' + Quotename(indexcode)
FROM TABLE_NAME
FOR xml path(''), type).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
DECLARE @query AS NVARCHAR(max) = ' SELECT *
FROM TABLE_NAME
PIVOT ( max(grade)
FOR indexcode IN ('+@cols+') ) pvt';
EXECUTE(@query)
演示