想问一个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.   

    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.   

    如果有intersect(交运算)那更好,如果没有只能分两次查询查询出stock_type没有修改的select   distinct   stock_type,sum(contract_cost)   from   contract_info 
    group by stock_type having stock_type not in (
    select value from contract_temp
    )查询出stock_type修改过的
    select distinct   value,sum(contract_cost) from contract_info, contract_temp 
    where contract_info.main_doc_id = contract_temp.contract_id