记得忘记@博客

MSN:pingkeke@hotmail.com QQ:13542427 你在我记忆旅行 每步也惊心 跟你踏过许多足印 舍不得转身...

动态交叉表总结

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

阅读更多
文章标签: sql table go
个人分类: 数据库开发
上一篇初试项目经理,我认为一个项目经理应具备的几点
下一篇通用动态交叉表的实现
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭