鱼C论坛

 找回密码
 立即注册
查看: 3796|回复: 10

[已解决]求SQL查询语句

[复制链接]
发表于 2013-5-30 08:48:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求SQL查询语句:
表A
月份  科目     本月数   
1     6001      10        
1     6002      15
1     6003      20
2     6001       6      
2     6002       5
3     6002      10
3     6003       8
要求显示结果
月份   科目     本月数    累计数
1     6001      10         10      
1     6002      15         15
1     6003      20         20
2     6001       6         16      
2     6002       5         20
2     6003       0         20
3     6001       0         16      
3     6002       5         25
3     6003       8         28
最佳答案
2013-6-4 19:03:04
求SQL查询语句:
表A
月份  科目     本月数   
1     6001      10        
1     6002      15
1     6003      20
2     6001       6      
2     6002       5
3     6002      10
3     6003       8
要求显示结果

我先给字段取个名

month object  cou   num
月份   科目     本月数    累计数
1     6001      10         10      
1     6002      15         15
1     6003      20         20
2     6001       6         16      
2     6002       5         20
2     6003       0         20
3     6001       0         16      
3     6002       5         25
3     6003       8         28

那么正确的语句是

select month,object,cou,count(cou) '累计数' from 表名;

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-30 09:02:51 | 显示全部楼层
我只是路过打酱油的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-30 09:17:13 | 显示全部楼层
找百度啊www.whgongsizhuce.com
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-4 07:22:34 | 显示全部楼层
你那累计数是怎么出来的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-4 19:03:04 | 显示全部楼层    本楼为最佳答案   
求SQL查询语句:
表A
月份  科目     本月数   
1     6001      10        
1     6002      15
1     6003      20
2     6001       6      
2     6002       5
3     6002      10
3     6003       8
要求显示结果

我先给字段取个名

month object  cou   num
月份   科目     本月数    累计数
1     6001      10         10      
1     6002      15         15
1     6003      20         20
2     6001       6         16      
2     6002       5         20
2     6003       0         20
3     6001       0         16      
3     6002       5         25
3     6003       8         28

那么正确的语句是

select month,object,cou,count(cou) '累计数' from 表名;

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-16 16:48:19 | 显示全部楼层
oracle 好像有啥啥rank的包,不知道能实现不,但是可以用存储过程实现楼主需求。以下是本人写的匿名存储过程。

create table tmp_test
(   mon  varchar2(30),
    item varchar2(30),
    cnt varchar2(30)
);
select * from tmp_test;
--------------------------------------
1        6001        1
1        6002        2
1        6003        3
2        6001        1
2        6002        2
2        6003        3
3        6001        1
----------------------------------------------

declare
  v_acc number(10);
  cursor c1 is
    select * from tmp_test order by mon, item;
begin
  for rec in c1 loop
    select sum(cnt)
      into v_acc
      from tmp_test
     where mon <= rec.mon
       and item = rec.item;
    DBMS_OUTPUT.put_line(rec.mon ||',' ||rec.item || ',' ||rec.cnt ||',' ||v_acc);
  end loop;
end;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-16 16:49:45 | 显示全部楼层
忘记贴出最后打印结果了
1,6001,1,1
1,6002,2,2
1,6003,3,3
2,6001,1,2
2,6002,2,4
2,6003,3,6
3,6001,1,3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-22 00:18:07 | 显示全部楼层
我想问你的是你的累计数是怎么算出来的哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-22 09:32:42 | 显示全部楼层
围观中:lol::lol::lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-16 20:55:27 | 显示全部楼层
你这个显示的结果都有问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-6-1 14:31:36 | 显示全部楼层
这么简单的题都没人答出来啊.....


  1. 以mysql为例:
  2. (沿用上面仁兄的建表语句)
  3. create table tmp_test
  4. (   mon  int(2),
  5.     item varchar(10),
  6.     num int(11)
  7. )

  8. insert into tmp_test
  9. select 1, '6001', 10 from dual union all
  10. select 1, '6002', 15 from dual union all
  11. select 1, '6003', 20 from dual union all
  12. select 2, '6001', 6  from dual union all
  13. select 2, '6002', 5  from dual union all
  14. select 3, '6002', 10 from dual union all
  15. select 3, '6003', 8  from dual

  16. -- 思路就是先补全月份,再按item的分组进行累加.
  17. select mon, item, num, sum from (
  18.         select mon, item, num, if(@i = item, @x := @x + num, @x := num) as sum, @i := item
  19.         from (select @x := 0) x, (select @i := 0) i, (
  20.                 select b.mon, b.item, ifnull(a.num, 0) num
  21.                 from tmp_test a
  22.                 right join (
  23.                         select mon, item from (select distinct mon from tmp_test) a, (select distinct item from tmp_test) b
  24.                 ) b on a.mon = b.mon and a.item = b.item
  25.                 order by b.item, b.mon
  26.         ) t
  27. ) tt order by mon, item

  28. 如果是oracle就更简单啦..(当然还是得先补全月份,就省略了...)
  29. select mon, item, num, sum(num) over(partition by item order by mon) from t
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 02:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表