我有一张这样的桌子:
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之间变化。
答案 0 :(得分:1)
您可以在下面尝试-
select factorycode,pv.*
from tablename
pivot
(max(grade) for indexcode in ([1],[2],[3])) as pv
答案 1 :(得分:1)
在这种情况下,如果您的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)