想问一个sql语句的写法或者这个需求怎么实现?谢谢大家 
  现在有两个表,第一个表是主表字段大概为 
  --   合同信息表 
    create   table   CONTRACT_INFO                                             

    MAIN_DOC_ID                                 VARCHAR2(32)   not   null,---主文档ID,唯一 
    CONTRACT_NAME                             VARCHAR2(256),--合同名称 
    STOCK_TYPE                                   VARCHAR2(128),--采购类型 
    CONTRACT_COST                             NUMBER(16,4)---合同金额 

--合同临时表 
    create   table   CONTRACT_TEMP                                           

    CONTRACT_ID                             VARCHAR2(32)   not   null,---主键   唯一,和CONTRACT_INFO中的MAIN_DOC_ID关联 
    KEY_WORD                                   VARCHAR2(128),--关键字   
    VALUE                                   VARCHAR2(512)---内容 

select   *   from     contract_info 
main_doc_id                                                         contract_name           stock_type               contract_cost 
E9B3BAC1CF8C0733482570EC002E586A                 合同A                     省公司统谈统签           1150 现在是这样的,我   要修改CONTRACT_INFO的字段的数值,比如我要修改一条合同信息表(CONTRACT_INFO)STOCK_TYPE   
数值,将   '省公司统谈统签'   改为'地市分公司统谈统签'     但我不能修改原表中的数值,也就是不能CONTRACT_INFO,我只能取出main_doc_id,stock_type,以及它所对应的值, 
插入到合同临时表中来,合同临时表就新增了一条数据。 
这样   合同临时表就会 
select   *   from     contract_temp 
contract_id                                                           key_word                           value               
E9B3BAC1CF8C0733482570EC002E586A                 stock_type                   地市分公司统谈统签           
原合同信息表记录没有变。 现在我要按照stock_type来取得contract_cost的数值,如果不考虑到合同临时表,我就应该这样来写sql语句。 
select   distinct   stock_type,sum(contract_cost)   from   contract_info 
但这样就不是取得的真实数据,我要把修改之后的数据取出来,这个sql语句应该怎么写? 不知道我说清楚了没有,谢谢大家。   
有不明白的,请加入这个群进行讨论,JAVA-ORACLE   群   2749375 谢谢大家 

解决方案 »

  1.   

    想问一个sql语句的写法或者这个需求怎么实现?谢谢大家
     现在有两个表,第一个表是主表字段大概为
     -- 合同信息表
      create table CONTRACT_INFO                      
    (
      MAIN_DOC_ID                VARCHAR2(32) not null,---主文档ID,唯一
      CONTRACT_NAME            VARCHAR2(256),--合同名称
      STOCK_TYPE                 VARCHAR2(128),--采购类型
      CONTRACT_COST              NUMBER(16,4)---合同金额
    )
    --合同临时表
      create table CONTRACT_TEMP                     
    (
      CONTRACT_ID              VARCHAR2(32) not null,---主键 唯一,和CONTRACT_INFO中的MAIN_DOC_ID关联
      KEY_WORD                 VARCHAR2(128),--关键字 
      VALUE                  VARCHAR2(512)---内容
    )
    select * from  contract_info
    main_doc_id                            contract_name     stock_type       contract_cost
    E9B3BAC1CF8C0733482570EC002E586A        合同A          省公司统谈统签     1150现在是这样的,我 要修改CONTRACT_INFO的字段的数值,比如我要修改一条合同信息表(CONTRACT_INFO)STOCK_TYPE 
    数值,将 '省公司统谈统签' 改为'地市分公司统谈统签'  但我不能修改原表中的数值,也就是不能CONTRACT_INFO,我只能取出main_doc_id,stock_type,以及它所对应的值,
    插入到合同临时表中来,合同临时表就新增了一条数据。
    这样 合同临时表就会
    select * from  contract_temp
    contract_id                             key_word             value       
    E9B3BAC1CF8C0733482570EC002E586A        stock_type         地市分公司统谈统签     
    原合同信息表记录没有变。现在我要按照stock_type来取得contract_cost的数值,如果不考虑到合同临时表,我就应该这样来写sql语句。
    select distinct stock_type,sum(contract_cost) from contract_info
    但这样就不是取得的真实数据,我要把修改之后的数据取出来,这个sql语句应该怎么写?不知道我说清楚了没有,谢谢大家。 
      

  2.   

    select   temp.STOCK_TYPE,   sum(info.CONTRACT_COST)   from   CONTRACT_INFO   info,   CONTRACT_TEMP   temp
    where   info.MAIN_DOC_ID=temp.CONTRACT_ID   group   by   temp.STOCK_TYPE这样就应该能达到你的需求了怎么楼主发了2个相同的帖子
      

  3.   

    首先,合同信息表中的数据,并不保证可用,必须使用合同临时表覆盖;
    其次,合同临时表中,没有保存新的合同类型:STOCK_TYPE,而是存储了其中文名,因此你需要再将这个中文名还原为合同类型,或者你在合同临时表中,同样也记录其类型编号,而不是记录类型名(为什么你两个类似的表使用不同的方式表达?)
    再者,合同被修改一次后,再一次修改又是如何处理?直接修改临时信息表还是再插入一次新记录,如果继续加记录,那么哪个算后?怎么没有时间?假设,上述问题的最后一个是更新临时表,那么在合同表中使用not exists排除合同临时表中的那部分记录,再把合同临时表相加(集合加),产生的视图作为你查询的基础,就很容易了