sql 理解
来源:互联网 发布:一维数组与指针 编辑:程序博客网 时间:2024/06/08 11:05
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)
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
需要将上图变为下图结果。
实现行转列,及把第一张图片中红圈的部分的内容放置到 列上,作为列的标题。。。
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 这一列的值,都放过去作为列的属性名。。。看图两个圈的描述吧。具体本人也不是很好描述。
1 0
- sql 理解
- 如何理解exists sql
- sql事务的理解
- 理解NULL IN SQL
- sql的理解
- SQL 索引理解
- SQL IAM的理解
- SQLite 理解的 SQL
- SQL JOIN 理解
- SQL连接知识理解
- 十步理解sql
- sql 语言理解加深
- Spark SQL的理解
- Spark SQL深度理解
- Sql 锁的理解
- 完整理解sql
- sql索引 自己理解
- 理解sql原理
- 4sum
- iOS 之连续动画
- 手动配置三大框架整合:Spring+Struts2+mybatis
- Windows Phone WebBrowser的技巧
- 【ObjC】@interface类名(categoryName)
- sql 理解
- 兔子--gradle安装和配置
- (3)最大子段和问题____动态规划
- spi 基础知识
- 黑马程序员-iOS基础-Objective-C基础(七)
- iOS 之邮箱正则表达式
- 查看当前系统的glibc版本
- ios + cocos2d-x 友盟SDK触发方法
- Eclipse中查看.properties文件中文乱码问题