CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

求一SQL语句

楼主ptma(守望者)2004-09-03 09:56:31 在 Oracle / 基础和管理 提问

有A,B两个表  
  A中有字段   MID,JiFenAll   ...  
  B中有字段   MID,JiFen,Date_  
   
  A,B的关系:  
  A中的JiFenAll为B中JiFen的总和(相同的MID)  
   
  现在要这样,计算出某一日期(Date_)前的B中的MID   的JiFen总和,A中减去这个总和,  
  也就是去掉   某一日期(Date_)前的JiFen  
   
  如何写Update语句更新A?  
   
  拜托了!!! 问题点数:100、回复次数:19Top

1 楼JeromeLiu(烛光)回复于 2004-09-03 10:03:05 得分 50

--try   next:  
  update   t1   set   t1.JiFenAll   =   (t1.JiFenAll   -   t2.JiFen)  
  from   A   t1  
  ,(  
      select   MID,sum(JiFen)   JiFen   from   B    
      where   Date_   <   某日期  
      group   by   MID  
  )   t2  
  where   t1.MID   =   t2.MIDTop

2 楼bzszp(SongZip)回复于 2004-09-03 10:03:18 得分 50

update   a   set   jifenall=jifenall-(select   sum(jifen)  
  from   b   where   date_<=to_date('2004-01-01','yyyy-mm-dd')  
  and   b.mid=a.mid)  
  where   exists   (select   1   from   b   where   b.mid=a.mid);Top

3 楼bzszp(SongZip)回复于 2004-09-03 10:05:13 得分 0

JeromeLiu(烛光)兄   用的不是oracle的语法吧  
  sql   server的。Top

4 楼ptma(守望者)回复于 2004-09-03 10:30:48 得分 0

都不行啊Top

5 楼bzszp(SongZip)回复于 2004-09-03 10:35:38 得分 0

哪里不行?  
  把执行的脚本帖出来  
  包括提示的错误信息。Top

6 楼JeromeLiu(烛光)回复于 2004-09-03 10:59:47 得分 0

--我的语句有问题,很抱歉,我测试了一下,下面的应该可以:  
  update   A   set   JiFenAll   =    
  JiFenAll   -    
  nvl(  
  (    
    select   sum(JiFen)   from   B    
      where   Date_   <   '某日期'  
      where   MID   =   A.MID  
  ),0)Top

7 楼ptma(守望者)回复于 2004-09-03 11:00:31 得分 0

缺少表达式:select处Top

8 楼bzszp(SongZip)回复于 2004-09-03 11:03:00 得分 0

你的语句呢?也帖出来Top

9 楼JeromeLiu(烛光)回复于 2004-09-03 11:15:10 得分 0

缺少表达式:select处  
  --  
  把语句帖出,汗~~Top

10 楼ptma(守望者)回复于 2004-09-03 11:22:20 得分 0

语句分别是  
  update   vip_card   set   JIFEN_BALANCE=JIFEN_BALANCE-(select   sum(amt)  
  from   vip_consume   where   date_<'28-SEP-02'  
  and   vip_consume.cardid=vip_card.cardid)  
  where   exists   (select   1   from   vip_consume   where   vip_card.cardid=vip_consume.cardid);    
  /  
   
   
  update   vip_card   set   JIFEN_BALANCE   =    
  JIFEN_BALANCE   -    
  nvl(  
  (    
    select   sum(amt)   from   vip_consume    
      where   date_   <   '28-SEP-03'  
      and   cardid   =   vip_card.cardid   group   by   cardid  
  ),0)Top

11 楼JeromeLiu(烛光)回复于 2004-09-03 11:37:54 得分 0

update   vip_card   set   JIFEN_BALANCE=JIFEN_BALANCE-(select   sum(amt)  
  from   vip_consume   where   date_<to_date('2002-09-28','yyyy-mm-dd')  
  and   vip_consume.cardid=vip_card.cardid)  
  where   exists   (select   1   from   vip_consume   where   vip_card.cardid=vip_consume.cardid);    
  /  
   
   
  update   vip_card   set   JIFEN_BALANCE   =    
  JIFEN_BALANCE   -    
  nvl(  
  (    
    select   sum(amt)   from   vip_consume    
      where   date_   <   to_date('2002-09-28','yyyy-mm-dd')  
      and   cardid   =   vip_card.cardid    
  ),0)  
   
  /  
  Top

12 楼ptma(守望者)回复于 2004-09-03 12:02:43 得分 0

不是date格式的问题Top

13 楼JeromeLiu(烛光)回复于 2004-09-03 12:22:18 得分 0

update   vip_card   set   JIFEN_BALANCE   =    
  JIFEN_BALANCE   -    
  nvl(  
  (    
    select   sum(amt)   from   vip_consume    
      where   date_   <   to_date('2002-09-28','yyyy-mm-dd')  
      and   cardid   =   vip_card.cardid    
  ),0)  
  /  
  --这个在我机器上通过Top

14 楼JeromeLiu(烛光)回复于 2004-09-03 12:25:58 得分 0

create   table   AAA(MID   number(2),JiFenAll   number(5));  
  create   table   BBB(MID   number(2),JiFen   number(5),Date_   date);  
   
  insert   into   AAA   values(1,500);  
  insert   into   AAA   values(2,200);  
  insert   into   AAA   values(3,250);  
  insert   into   AAA   values(4,300);  
   
  insert   into   BBB   values(1,10,sysdate);  
  insert   into   BBB   values(1,20,sysdate);  
  insert   into   BBB   values(1,30,sysdate);  
  insert   into   BBB   values(2,100,sysdate);  
  insert   into   BBB   values(3,100,sysdate);  
  insert   into   BBB   values(3,200,sysdate);  
   
  select   *   from   aaa;  
  select   *   from   bbb;  
   
  update   AAA   a   set   JiFenAll   =    
  JiFenAll   -    
  nvl(  
  (    
    select   sum(JiFen)   from   BBB    
      --where   Date_   <   某日期  
      where   MID   =   a.MID  
  ),0);  
   
  select   *   from   aaa;  
   
  drop   table   AAA;  
  drop   table   BBB;Top

15 楼bzszp(SongZip)回复于 2004-09-03 12:26:19 得分 0

不知道楼主是什么问题  
  Top

16 楼bzszp(SongZip)回复于 2004-09-03 12:33:22 得分 0

 
  12:20:48   SQL>   select     *     from     aaa;      
   
                MID       JIFENALL  
  ----------   ----------  
                    1                 500  
                    2                 200  
                    3                 250  
                    4                 300  
   
  已用时间:     00:   00:   00.03  
  12:20:49   SQL>   select     *     from     bbb;      
   
                MID             JIFEN   DATE_  
  ----------   ----------   ----------  
                    1                   10   03-9月   -04  
                    1                   20   03-9月   -04  
                    1                   30   03-9月   -04  
                    2                 100   03-9月   -04  
                    3                 100   03-9月   -04  
                    3                 200   03-9月   -04  
   
  已选择6行。  
   
  已用时间:     00:   00:   00.66  
  12:20:50   SQL>      
  12:20:51   SQL>   update   aaa   set   jifenall=jifenall-(select   sum(jifen)   from    
  12:22:03       2     bbb   where   bbb.mid=aaa.mid)  
  12:22:19       3     where   exists   (select   1   from   bbb   where   bbb.mid=aaa.mid);  
   
  已更新3行。  
   
  已用时间:     00:   00:   00.41  
  12:22:38   SQL>   select   *   from   aaa;  
   
                MID       JIFENALL  
  ----------   ----------  
                    1                 440  
                    2                 100  
                    3                 -50  
                    4                 300  
   
  已用时间:     00:   00:   00.75  
  12:23:03   SQL>   commit;  
   
  提交完成。  
   
  已用时间:     00:   00:   00.07Top

17 楼ptma(守望者)回复于 2004-09-03 13:02:25 得分 0

你们是oralce的数据库的SQL?Top

18 楼bzszp(SongZip)回复于 2004-09-03 13:04:03 得分 0

是的  
  你好好检查一下,不应该有问题的。Top

19 楼bzszp(SongZip)回复于 2004-09-03 15:48:22 得分 0

注意:'-'号不能放在一行的最后,SQL*PLUS会认为是行连接符,而不是减号!Top

相关问题

  • 一SQL语句?
  • 一个SQL语句
  • 一个SQL语句?
  • 一条sql语句
  • 求一sql语句!
  • 求一sql语句!!
  • 求一sql语句
  • 求一 SQL语句
  • 求一SQL语句
  • 一个SQL语句!

关键词

  • date
  • sql
  • jifen
  • jifenall
  • mid
  • bbb
  • aaa
  • 月
  • 时间
  • update

得分解答快速导航

  • 帖主:ptma
  • JeromeLiu
  • bzszp

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo