重点:
1、用到了SQL 中 PIVOT 函数实现列转行操作
2、用SQL拼接实现动态行转列
说明:
1、@Tex 指的是使用PIVOT函数中IN里面转换成列的动态数据
2、@SQL是为了拼接@Tex使用的,如果不做拼接的话IN里面无法直接写@Tex
//创建一个参数 后面做拼接用
declare @Tex as varchar(max)
//创建SQL 参数
declare @sql nvarchar(max)
//给@Tex赋值
set @Tex=( SELECT STUFF((SELECT DISTINCT ','+'['+XX+']' FROM dbo.JZXGL GROUP BY CC,XX FOR XML PATH('') ),1,1,''))
//给@SQL赋值
SET @sql=' SELECT * FROM (
SELECT CC,XX,COUNT(1) AS GS FROM dbo.JZXGL
group BY CC,XX
)A
PIVOT(
//用拼接的方式把Tex拼接到SQL中
sum(GS) FOR XX IN ('+@Tex+')
)piv'
//执行SQL
EXEC(@sql)
这是起初数据
根据XX列转换成行进行统计
如果XX列多了一种类型那么在Tex中就会发现 ,从而实现动态转换