原始数据如下图:

想得到的数据:

测试数据:
CREATE TABLE #T(CLASS VARCHAR(10),NAME VARCHAR(20),GRADE VARCHAR(10))INSERT INTO #TSELECT '1','TOM','A' UNION ALLSELECT '1','JACK','A' UNION ALLSELECT '1','JERRY','B' UNION ALLSELECT '1','JANE','A' UNION ALLSELECT '2','ROSE','C' UNION ALLSELECT '2','FRANK','C' UNION ALLSELECT '3','JERRY','Q' UNION ALLSELECT '3','ZOE','C' UNION ALLSELECT '3','HENRY','A'
静态语句实现:
SELECT *FROM #TPIVOT (COUNT(NAME) FOR GRADE IN ([A],[B],[C],[Q])) B
效果如下:

如果等次不是固定的,而是动态的,可以通过动态sql语句实现:
declare @sql varchar(max)set @sql='' --初始化变量@sqlselect @sql=@sql+','+grade from #T group by GRADE --变量多值赋值set @sql=stuff(@sql,1,1,'') --去掉首个‘,‘set @sql='SELECT * FROM #T PIVOT (COUNT(NAME) FOR GRADE IN ('+@sql+'))B'exec(@sql)
说明:
stuff(param1, startIndex, length, param2)
将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。
FOR XML PATH 可以将查询结果根据行输出成XML各式(暂时未用)
EXEC命令执行一个动态的批处理,可以用于执行存储过程。
文章转载自云自由,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




