邹建大哥,我想写一个通用的针对单表用的交叉表存储过程!(挑战性)
我想写一个通用的针对单表用的交叉表存储过程
传入几个参数:
@TableName varchar(16) --表名
@纵轴 varchar(20) --交叉表最左面的列
@横轴 varchar(10) --交叉表最上面的列
@表体内容 numeric(10,2) --交叉表的数字内容
@是否加横向合计 bit --为1时在交叉表横向最右边加横向合计
@是否家纵向合计 bit --为1时在交叉表纵向最下边加纵向合计
思路:
1、取得disinct 横轴字段 后,取得唯一的横轴字段表
2、根据横轴的唯一字段内容,循环整个表后动态生成一个Sql语句,
像select 科室,sum(case(横轴字段表.....).......) from @tablename group
by 科室
exec 生成的Sql
3、根据参数是否合计,分别加合计字段,求出横向合计和纵向合计
您看这个思路行吗?但有一个限制就是横轴不能太多,多了Sql可能会超过8000字符。一般不会这么多,如果太多就把横轴变为纵轴,总之取字段较少的做横轴,这个就是传参数时的问题了。
如果弄成了,这个在一定的范围内应该是比较通用的了。对不!
这是我的思路,具体写的时候,感觉到Sql的组合比较麻烦,能帮我写一下吗?