楼主: zs_netjun

[精华] 这个能用view实现吗

[复制链接]
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
11#
发表于 2009-9-28 13:56 | 只看该作者
原帖由 zs_netjun 于 2009-9-28 13:47 发表
编号也不是连续的

编号      日期             借项     贷项     
1        2009-09-09        100   
5        2009-09-09                 50
13        2009-09-11        250      
24        2009-09-12        80      
35        2009-09-13        40      
46        2009-09-14                 150         
         

--结果数据
编号      日期             借项     贷项    余额  
1        2009-09-09        100              100
5        2009-09-09                 50      50
13        2009-09-11        250            300
24        2009-09-12        80             380
35        2009-09-13        40               420
46        2009-09-14                 150     270




完全可以用视图, 报表的数据源可以基于如下创建的视图!

具体如下:

SQL> select * from test;

        BH RQ                  JK         DK
---------- ----------- ---------- ----------
         1 2009-9-9           100
         2 2009-9-10                      50
         3 2009-9-11          250
         4 2009-9-12           80
         5 2009-9-13           40
         6 2009-9-14                     150

6 rows selected

SQL>
SQL> select bh "编号",
  2         rq "日期",
  3         jk "借项",
  4         dk "贷项",
  5         sum(nvl(jk, 0) - nvl(dk,0)) over(order by rq, bh) "余额"
  6  from test;

      编号 日期              借项       贷项       余额
---------- ----------- ---------- ---------- ----------
         1 2009-9-9           100                   100
         2 2009-9-10                      50         50
         3 2009-9-11          250                   300
         4 2009-9-12           80                   380
         5 2009-9-13           40                   420
         6 2009-9-14                     150        270

6 rows selected

SQL>

-----------------------------------------------------------------------------------

--第2种情况

SQL> select * from test;

        BH RQ                  JK         DK
---------- ----------- ---------- ----------
         1 2009-9-9           100
         5 2009-9-9                       50
        13 2009-9-11          250
        24 2009-9-12           80
        35 2009-9-13           40
        46 2009-9-14                     150

6 rows selected

SQL>
SQL> select bh "编号",
  2         rq "日期",
  3         jk "借项",
  4         dk "贷项",
  5         sum(nvl(jk, 0) - nvl(dk,0)) over(order by rq, bh) "余额"
  6  from test;

      编号 日期              借项       贷项       余额
---------- ----------- ---------- ---------- ----------
         1 2009-9-9           100                   100
         5 2009-9-9                       50         50
        13 2009-9-11          250                   300
        24 2009-9-12           80                   380
        35 2009-9-13           40                   420
        46 2009-9-14                     150        270

6 rows selected

SQL>         



[ 本帖最后由 bell6248 于 2009-9-28 14:00 编辑 ]

使用道具 举报

回复
论坛徽章:
0
12#
 楼主| 发表于 2009-9-28 16:27 | 只看该作者
真的吗,太谢谢bell6248 了,我马上去试试.

惭愧呀,说起来也做了七年技术,要努力学习啊

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2009-9-28 16:49 | 只看该作者
不太明白over的用法,还请bell6248帮我分析一下下面这种情况,万分感谢!

还有一个余额表
  
  公司   余额
  ——   ————
  101    1000
  102    500

      编号 日期              借项       贷项   公司
---------- ----------- ---------- ----------    -----
         1 2009-9-9           100               101
         5 2009-9-9                       50    101
        13 2009-9-11          250               101
        24 2009-9-9           80               102
        35 2009-9-13           40               102
        46 2009-9-14                     150    102

--结果
      编号 日期              借项       贷项       余额   公司
---------- ----------- ---------- ---------- ----------   -----
         1 2009-9-9           100                   1100   101
         5 2009-9-9                       50        1050   101
        13 2009-9-11          250                   1300   101
        24 2009-9-9           80                    580   102
        35 2009-9-13           40                   620   102
        46 2009-9-14                     150        470   102

使用道具 举报

回复
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
14#
发表于 2009-9-28 17:05 | 只看该作者
原帖由 zs_netjun 于 2009-9-28 16:49 发表
不太明白over的用法,还请bell6248帮我分析一下下面这种情况,万分感谢!

还有一个余额表
  
  公司   余额
  ——   ————
  101    1000
  102    500

      编号 日期              借项       贷项   公司
---------- ----------- ---------- ----------    -----
         1 2009-9-9           100               101
         5 2009-9-9                       50    101
        13 2009-9-11          250               101
        24 2009-9-9           80               102
        35 2009-9-13           40               102
        46 2009-9-14                     150    102

--结果
      编号 日期              借项       贷项       余额   公司
---------- ----------- ---------- ---------- ----------   -----
         1 2009-9-9           100                   1100   101
         5 2009-9-9                       50        1050   101
        13 2009-9-11          250                   1300   101
        24 2009-9-9           80                    580   102
        35 2009-9-13           40                   620   102
        46 2009-9-14                     150        470   102





其实是一样的! 如果还有什么问题, 最好把问题一次描述清楚!

具体如下:

SQL> select * from tb_ye;

     GS_ID         YE
---------- ----------
       101       1000
       102        500

SQL> select * from test;

        BH RQ                  JK         DK      GS_ID
---------- ----------- ---------- ---------- ----------
         1 2009-9-9           100                   101
         5 2009-9-9                       50        101
        13 2009-9-11          250                   101
        24 2009-9-9            80                   102
        35 2009-9-13           40                   102
        46 2009-9-14                     150        102

6 rows selected

SQL>
SQL> select a1.bh "编号",
  2         a1.rq "日期",
  3         a1.jk "借项",
  4         a1.dk "贷项",
  5         b1.ye + sum(nvl(a1.jk, 0) - nvl(a1.dk,0)) over(partition by a1.gs_id order by a1.rq, a1.bh) "余额",
  6         a1.gs_id "公司"
  7  from test a1, tb_ye b1
  8  where a1.gs_id = b1.gs_id;

      编号 日期              借项       贷项       余额       公司
---------- ----------- ---------- ---------- ---------- ----------
         1 2009-9-9           100                  1100        101
         5 2009-9-9                       50       1050        101
        13 2009-9-11          250                  1300        101
        24 2009-9-9            80                   580        102
        35 2009-9-13           40                   620        102
        46 2009-9-14                     150        470        102

6 rows selected

SQL>         

使用道具 举报

回复
论坛徽章:
164
技术图书徽章
日期:2018-12-26 10:01:29指数菠菜纪念章
日期:2013-06-28 17:41:29蛋疼蛋
日期:2013-04-03 16:29:52指数菠菜纪念章
日期:2013-04-01 15:26:282013年新春福章
日期:2013-02-25 14:51:24指数菠菜纪念章
日期:2013-01-04 11:30:40指数菠菜纪念章
日期:2012-09-29 10:28:42版主6段
日期:2012-05-15 15:24:11指数菠菜纪念章
日期:2012-03-31 14:04:28茶鸡蛋
日期:2012-03-12 16:56:15
15#
发表于 2009-9-28 17:07 | 只看该作者
原帖由 bell6248 于 2009-9-28 13:56 发表




完全可以用视图, 报表的数据源可以基于如下创建的视图!

具体如下:

SQL> select * from test;

        BH RQ                  JK         DK
---------- ----------- ---------- ----------
         1 2009-9-9           100
         2 2009-9-10                      50
         3 2009-9-11          250
         4 2009-9-12           80
         5 2009-9-13           40
         6 2009-9-14                     150

6 rows selected

SQL>
SQL> select bh "编号",
  2         rq "日期",
  3         jk "借项",
  4         dk "贷项",
  5         sum(nvl(jk, 0) - nvl(dk,0)) over(order by rq, bh) "余额"
  6  from test;

      编号 日期              借项       贷项       余额
---------- ----------- ---------- ---------- ----------
         1 2009-9-9           100                   100
         2 2009-9-10                      50         50
         3 2009-9-11          250                   300
         4 2009-9-12           80                   380
         5 2009-9-13           40                   420
         6 2009-9-14                     150        270

6 rows selected

SQL>

-----------------------------------------------------------------------------------

--第2种情况

SQL> select * from test;

        BH RQ                  JK         DK
---------- ----------- ---------- ----------
         1 2009-9-9           100
         5 2009-9-9                       50
        13 2009-9-11          250
        24 2009-9-12           80
        35 2009-9-13           40
        46 2009-9-14                     150

6 rows selected

SQL>
SQL> select bh "编号",
  2         rq "日期",
  3         jk "借项",
  4         dk "贷项",
  5         sum(nvl(jk, 0) - nvl(dk,0)) over(order by rq, bh) "余额"
  6  from test;

      编号 日期              借项       贷项       余额
---------- ----------- ---------- ---------- ----------
         1 2009-9-9           100                   100
         5 2009-9-9                       50         50
        13 2009-9-11          250                   300
        24 2009-9-12           80                   380
        35 2009-9-13           40                   420
        46 2009-9-14                     150        270

6 rows selected

SQL>         



使用道具 举报

回复
论坛徽章:
0
16#
 楼主| 发表于 2009-9-28 17:12 | 只看该作者
谢谢,不好意思,刚开始以为第一种做出来就OK了,看来我要好好去查查这种分析函数的用法.
下次去上海请你吃饭,呵呵,再次谢谢!

使用道具 举报

回复
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
17#
发表于 2009-9-28 17:21 | 只看该作者
原帖由 zs_netjun 于 2009-9-28 17:12 发表
谢谢,不好意思,刚开始以为第一种做出来就OK了,看来我要好好去查查这种分析函数的用法.
下次去上海请你吃饭,呵呵,再次谢谢!


使用道具 举报

回复
论坛徽章:
43
生肖徽章2007版:羊
日期:2008-05-27 15:39:39铁扇公主
日期:2012-01-25 17:44:56茶鸡蛋
日期:2012-06-10 20:12:42奥运会纪念徽章:跳水
日期:2012-07-09 16:38:12奥运会纪念徽章:手球
日期:2012-07-24 08:28:36奥运会纪念徽章:艺术体操
日期:2012-09-19 13:18:16奥运会纪念徽章:柔道
日期:2012-09-26 12:34:19ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19蜘蛛蛋
日期:2012-11-06 19:43:442013年新春福章
日期:2013-02-25 14:51:24
18#
发表于 2009-9-29 09:11 | 只看该作者

回复 #14 bell6248 的帖子

学习了

使用道具 举报

回复
论坛徽章:
21
2010新春纪念徽章
日期:2010-03-01 11:05:01
19#
发表于 2009-9-29 11:57 | 只看该作者
over(partition by)

使用道具 举报

回复
论坛徽章:
0
20#
发表于 2009-9-30 14:46 | 只看该作者
用OLAP分析函数很容易做到这点。

财务上的很多复杂计算,其实在SQL里一个简单的语句可以实现,比如你说的连续计算的,还有像移动加权平均等。

OLAP很有用。

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表