想问一个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语句应该怎么写?不知道我说清楚了没有,谢谢大家。 如果不清楚,可以加入我这个群进行讨论2749375 JAVA-ORACLE群

解决方案 »

  1.   


    with v as (
      select c.*, 
      NVL((select value from CONTRACT_TEMP where CONTRACT_ID=c.MAIN_DOC_ID and KEY_WORD='stock_type'), c.STOCK_TYPE)
      as stock_type1
      from CONTRACT_INFO c
    )
    select stock_type1, sum(contract_cost) from v group by stock_type1
      

  2.   

    select distinct when exits(select value from contract_temp where key_word='stock_type') then (select value from contract_temp where key_word='stock_type') else stock_type end as stock_type,sum(contract_cost) from contract_info group by stock_type
      

  3.   

    select distinct when exits(select t.value from contract_temp t where t.key_word='stock_type' and t.MAIN_DOC_ID=main.MAIN_DOC_ID) then (select s.value from contract_temp s where s.key_word='stock_type' and s.MAIN_DOC_ID=main.MAIN_DOC_ID) else main.stock_type end as stock_type1,sum(contract_cost) from contract_info main group by stock_type1
    这个才对