首页 新闻 会员 周边 捐助

各位博友们,问一个关于数据库的问题。

0
悬赏园豆:20 [已解决问题] 解决于 2013-07-26 14:21

我创建了一个视图  

create view getWanCAndMub
as
select '目标' as mubiao,jan,feb,mar,apr,may,jun,jul,aug,sept,oct,nov,dec,yeargoal from work_AreaGoal
where year=''+DateName(year,GetDate())+''
union all
select '完成' as wanch ,yi,er,san,si,wu,liu,qi,ba,jiu,shi,shiyi,shier,quannian from getTongJi
end
select * from getWanCAndMub

查询出的结果是:

 

现在我想在数据库里面做操作。

想统计:完成-目标的值。  现在如何操作。结果例如:

最初的、天空的主页 最初的、天空 | 初学一级 | 园豆:40
提问于:2013-07-26 09:56
< >
分享
最佳答案
0

select sum(case when mubiao=='目标' then -(jian) end) yi,....... from  getWanCAndMub

类似上面写,第一个yi是这么写,之后我用省略号,你懂得,试试看

收获园豆:10
懒胖gg | 初学一级 |园豆:144 | 2013-07-26 10:46

懂了,你知道除怎么解决吗?  完成/目标

最初的、天空 | 园豆:40 (初学一级) | 2013-07-26 10:55

@最初的、天空: 

大哥,这个简单啊,max(case when mubiao=='目标' then ‘完成/目标’) as b

懒胖gg | 园豆:144 (初学一级) | 2013-07-26 11:03

@fly in ocean: 不对吧。 我想得到的结果是这样的。 

最初的、天空 | 园豆:40 (初学一级) | 2013-07-26 11:22

@最初的、天空: 

话说

这个效果实现了吗,要是实现上面的效果,你在视图之前做吧,这个有点难度

懒胖gg | 园豆:144 (初学一级) | 2013-07-26 11:42

@最初的、天空: 你这个思路有问题啊!!你要解决问题,如果没有限制你在一个Select语句里实现,你干嘛要钻牛角尖呢?!所以,你可以用存储过程,写游标等等。

你非要钻进来,我也没办法,提供你思路:这种行运算你只能借助统计函数来做,如果不能转化为平均函数和sum函数,那只能先将行转为列,列是可以进行运算的,然后再将运算后的列转为行,传统列和行的转换一般用Case来完成(Sql server),新版本的有扩展的转换语句了,去查PIVOT关键字。语句我不给你写了,提供一个思路。

kylin.chen | 园豆:983 (小虾三级) | 2013-07-26 12:45
其他回答(2)
0

1、修改目标的Sql语句,全部变为负数

2、然后union

3、然后group by 做Sum运算

kylin.chen | 园豆:983 (小虾三级) | 2013-07-26 10:12

大侠,如何去写?

支持(0) 反对(0) 最初的、天空 | 园豆:40 (初学一级) | 2013-07-26 10:19
0

用个自连接就能解决了~

SELECT '完成-目标',t2.jan-t1.jan,... FROM 
(select id=1,* from getWanCAndMub WHERE mubiao='目标') t1 
JOIN 
(select id=1,* from getWanCAndMub WHERE mubiao='完成') t2
ON t1.id=t2.id

楼上所说的,行转列挺好的。

收获园豆:10
幻天芒 | 园豆:37205 (高人七级) | 2013-07-26 13:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册