设计表如下
--收入表 CREATE TABLE income ( inid INT PRIMARY KEY IDENTITY(1, 1), indate DATETIME, --时间 intype VARCHAR(10), -- 收入类型 amount DECIMAL(18, 2) --金额 )
查询按年月,将收入类型从行转成列
DECLARE @sql varchar(8000) --判断临时表是否存在,存在则删除 IF OBJECT_ID('tempdb..#TEMP') IS NOT NULL DROP TABLE #TEMP --查询结果放入临时表中 SELECT LEFT(CONVERT(VARCHAR(100),indate,20),7) indate, intype,SUM(amount) amountINTO #TEMP FROM dbo.income GROUP BY LEFT(CONVERT(VARCHAR(100),indate,20),7),intype --所有收入类型 select @sql=isnull(@sql+',','')+'['+intype+']' from #TEMP GROUP BY intype ORDER BY intype --pivot 行转列 set @sql='select * from #TEMP pivot (SUM(income) for intype in ('+@sql+')) a' --执行结果 exec(@sql) --判断临时表是否存在,存在则删除 IF OBJECT_ID('tempdb..#TEMP') IS NOT NULL DROP TABLE #TEMP
未行转列:
行转列: