mysql红黑联盟_sql理解 - mysql数据库栏目 - 红黑联盟

select b.*,

b.model_ent_name+cast(m.year as varchar)as modelname,

m.index_value as val

into #tb

from

(

select a.*,erm.model_ent_name

from

(select w.uuid,w.indexdef_id,

i.index_name, i.index_def,

case when w.years=2014 then w.actual_value else 0 end as k1,

case when w.years=2013 then w.actual_value else 0 end as k2,

case when w.years=2012 then w.actual_value else 0 end as k3,

case when w.years=2011 then w.actual_value else 0 end as k4,

case when w.years=2010 then w.actual_value else 0 end as k5

from bm_work w,bm_index i

where w.indexdef_id=i.uuid

and w.ent_id='2c90e4da49514c750149515eb56f0003' and w.summary_state=2

and years=2014

)a left join bm_ent_rel_me erm on a.uuid=erm.bmwork_id

)b

left join bm_model_ent m on b.indexdef_id=m.index_def_id and b.model_ent_name=m.model_ent_name

declare @sql varchar(8000)

select @sql=isnull(@sql+',','')+modelname from #tb group by modelname

set @sql = 'select * from #tb pivot (sum(val) for modelname in ('+@sql+') )a'

exec (@sql)

drop table #tb

b7d9beac8cb136cbc33cd91dffe8cdf9.png

需要将上图变为下图结果。

cf54a88bf5f306efa607e1dd8835354e.png

实现行转列,及把第一张图片中红圈的部分的内容放置到 列上,作为列的标题。。。

declare @sql varchar(8000)

select @sql=isnull(@sql+',','')+modelname from #tb group by modelname

set @sql = 'select * from #tb pivot (sum(val) for modelname in ('+@sql+') )a' //val 为值 modelname为需要将行转列

exec (@sql)

//写这种sql的思路就是,先自己写出类似图一 的结果,确定那一个需要行转列。。这里我们就是需要modelname 这一列的值,都放过去作为列的属性名。。。看图两个圈的描述吧。具体本人也不是很好描述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值