注册 登录
编程论坛 SQL Server论坛

关于sql中计算的问题

kamishiro 发布于 2013-03-21 21:36, 784 次点击
我今天刚网上自学sql,所以可能问的问题不专业,还请大家帮忙看看;
 我有前四列,我要得出最后列就是sum_count,为了方便大家看,那个date我都是按时间顺序排的.
 计算的逻辑是计算在该ID的日期之前的相同TYPE的累计count,
 比如ID4,在2012/1/4之前的同类型a有ID1和ID2,所以累计值是200
 如何在下面的程序里加入语句使得我能得到这个效果啊?谢谢啦
 select A.ID,A.date,A.type,A.count from A
ID    date    type    count    sum_count
1    2012/1/1    a    100    0
2    2012/1/2    a    100    100
3    2012/1/3    b    100    0
4    2012/1/4    a    100    200
5    2012/1/5    b    100    100


6 回复
#2
暖暖的南风2013-03-21 23:07
--使用存储过程来解决
CREATE PROCEDURE <存储过程名>
   @DATE_MESSAGE DATETIME
AS
   SELECT SUM(COUNT) FROM <表名> WHERE DATE<@DATE_MESSAGE AND TYPE=(SELECT TYPE FROM <表名> WHERE DATE = @DATE_MESSAGE)

--执行这个存储过程
EXECUTE <存储过程名> <你传进的日期>


不知道你开始传进去的值是不是日期,你没有描述清,我就只当传的是日期来写了,希望可以帮到你!
#3
Aviva_Wang2013-03-22 07:48
这个应该是你要的查询语句吧
select distinct [type]
,(select sum([a.count]) from tables  a where a.[type]=t.[type] )
 from tables  t
#4
Aviva_Wang2013-03-22 07:59
这个是我验证过的代码
select distinct [type]
,(select sum([count]) from tables  a where a.[type]=t.[type] ) as sum_count
 from tables  t
#5
kamishiro2013-03-22 09:47
回复 4楼 Aviva_Wang
应用的时候遇到点麻烦,比如我的原始表是前三列,ID,DATE,TYPE,
但是这个count不是我原始表里的,而是比如select  ****(一系列运算) as count,我查询的时候运算得出新的一列,这样我这个代码怎么改啊?
#6
kamishiro2013-03-22 10:25
回复 4楼 Aviva_Wang
A    B            C    D    E     F        G             H
ID    date          type    count    ratio    total    sum_count    remain
1    2012/1/1    a    2000    30%    1000      1000            600
2    2012/1/2    a    500    50%    1000      400            250
3    2012/1/3    b    300    40%    1000      1000            120
4    2012/1/4    a    800    20%    1000      150            150
5    2012/1/5    b    1500    10%    1000      880            150
                           
单元格    公式                        
G3    F7-SUMIFS($H$3:$H$7,$C$3:$C$7,C7,$B$3:$B$7,"<"&B7)                        
H3    MIN(D3*E3,G3)                        
疯了,不好意思,我真实要实现的是这样的效果,这是我在excel里做的公式,A-F是原始表,我要得出这全部表,这原始表名比如就是data_raw
#7
Aviva_Wang2013-03-24 09:28
用数据库函数,将我上面写的作为函数(Function),让后再用sql语句查询,最后一列调用函数
1