动态交叉表总结

xiaoxiao2021-03-01  26

declare @sql varchar(8000)看论坛里讨论动态交叉表这么多贴,小结了一下.其实创建动态交叉表里是应用了递归的select变量这种概念,递归的select变量可以使用select语句和子查询将一个变量与其自身拼接起来。

一个标准的创建动态交叉表的code我归纳如下:

Declare @sql varchar(8000)

set @sql = 'select columnA,'

select @sql = @sql + 'sum(case columnB when '''+columnB+ ''' then columnC else 0 end) as '''+columnB+ ''','

from (select distinct columnB from Table) as A

select @sql = left(@sql,len(@sql)-1) + ' from Table group by columnA'

exec(@sql)

go

相信这个可以实现绝大部分动态交叉表

Example:

Declare @S Nvarchar(4000)Set @S=''Select @S=@S+N',SUM(Case 所属糖厂 When N'''+所属糖厂+N''' Then 实际重量 Else 0 End) As '+所属糖厂From V_PonderationInfo_Gather Group By 所属糖厂 Order By 所属糖厂Select @S=N'Select ''总吨位'' As 所属糖厂 '+@S+' From V_PonderationInfo_Gather Group By 所属糖厂'EXEC(@S)

Declare @S Nvarchar(4000)Set @S=''Select @S=@S+N',SUM(Case 所属糖厂 When N'''+所属糖厂+N''' Then 实际重量 Else 0 End) As '+所属糖厂From V_PonderationInfo_Gather Group By 所属糖厂 Order By 所属糖厂Select @S=N'Select N''总吨位'' As 所属糖厂 '+@S+N' From V_PonderationInfo_Gather'EXEC(@S)GO

转载请注明原文地址: https://www.6miu.com/read-3450200.html

最新回复(0)