关闭

动态交叉表总结

标签: sqltablego
1200人阅读 评论(0) 收藏 举报
分类:

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:425652次
    • 积分:6564
    • 等级:
    • 排名:第3882名
    • 原创:210篇
    • 转载:23篇
    • 译文:20篇
    • 评论:61条
    最新评论