中易网

求一个比较复杂的SQL语句,字段值作为列名的方法

答案:3  悬赏:30  
解决时间 2021-01-15 20:17
  • 提问者网友:雪舞兮
  • 2021-01-15 08:02
求一个比较复杂的SQL语句,字段值作为列名的方法
最佳答案
  • 二级知识专家网友:妄饮晩冬酒
  • 2021-01-15 08:37
什么数据库?

我现在只能给你显示成这样,是不是不太满足?就是那汇总不好汇
不过我借助了一个视图和一个declare动态执行的,没把你的内容写死
-----------搞定了---------

先创建视图
create view v_e as 
select c.custom,a.name proname,sum(d.account) as account
from a,b,c,d where a.id=b.aid and c.id=d.bid and d.mid=b.id
group by c.custom,a.name
union all
select c.custom,b.name proname,sum(d.account) as account
from a,b,c,d where a.id=b.aid and c.id=d.bid and d.mid=b.id
group by c.custom,b.name
 
 
然后
declare @sql varchar(4000)
set @sql = 'select [custom]'
select @sql = @sql + ',sum(isnull(case [proname] when '''+[name]+''' then [account] end,0)) as 
['+[name]+']'
from (select top 1000 name from 

(select name,'t1' t,id  from a
union all
select name,'t2' t,aid id from b) c
order by id,t) as a
select @sql = @sql+' from [v_e] group by [custom]'
exec(@sql)
全部回答
  • 1楼网友:三千妖杀
  • 2021-01-15 10:11
你这个是行转列的知识点 由于行值不固定 所以你犯难了 其实很简单 用游标 就能搞定 写个存储过程吧
  • 2楼网友:拜訪者
  • 2021-01-15 09:14
mark! 有空来写写 你这个涉及到 行转列 如果列数 比较固定 建议用临时表 处理!!!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息