-1

我对以下情况感到震惊。需要您帮助根据以下示例数据修改我的查询。我的目标是使用 TEM_GT 和 TXN 表中的可用数据创建一个 EVENT AND EVENT_LOW。

TEM_GT(全局临时表)

est_id primary key, trans_id, trp_id, amount  
  1                   111      2221      1.5   
  2                   111      3332      2.0  
  3                   112      4443      3.0 

TXN 表

trans_id, trans_type
111          type1  
112          type1 

事件表

event_id primary key, trans_id,  trans_type, flag.  
   1000                 111         type1      N  
   1001                 112         type1      N  

EVENT_LOW 表 (最终表)

 event_low_id primary key, event_id, est_id, amount.  
    9991                      1000     1       1.5  
    9992                      1000     2       2.0  
    9993                      1001     3       3.0  

insert into(event_low_id, event_id, est_id, amount) 
 (
    select event_low_id_s.nextval e.event_id, tg.est_id, tg.amount from
    from   TEM_GT tg, EVENT ee
    WHERE
          tg.trans_id    = e.trans_id   
    AND e.flag           = 'N'
 );

基于 TEM_GT 和 TXN gt,将数据填充到 EVENT 表中。现在,当我尝试在 EVENT_LOW 表中填充数据时,上述查询返回 5 行而不是 3 行。这是由于 TEM_GT 表中的 trp_id。我不想在 EVENT 表中添加 trp_id,并且想处理上述选择查询中的重复消除。

我正在使用 Oracle 11g。请帮助我。

我只是构建下面的sql。它几乎解决了我的问题。但有时它会为金额列返回不同的值。我希望我的 event_low 结果如下所示 est_id 1

 event_low_id primary key, event_id, est_id, amount.    
    9991                      1000     1       1.5    
    9992                      1000     2       2.0      

但有时它会返回

 event_low_id primary key, event_id, est_id, amount.    
    9991                      1000     1       1.5    
    9992                      1000     2       1.5    

或者

 event_low_id primary key, event_id, est_id, amount.    
    9991                      1000     1       2.0    
    9992                      1000     2       2.0  

select *  
      from (select x.*,  
                    row_number() over (partition by event_id order by event_id) rn  
              from (seelct e.event_id, tg.est_id, tg.amount  
                           from   TEM_GT tg, EVENT e  
         WHERE  
               tg.trans_id    = e.trans_id     
               AND e.flag           = 'N'  
                    ) x  
            )  
      where rn = 1

任何帮助进一步调整它以获得准确的结果。提前致谢

4

2 回答 2

1

据我所知,根据条件,您的示例查询应该只返回 3 行。

但是,您的问题的答案可能是使用select distinct. 我还建议使用标准join语法:

select distinct event_low_id_s.nextval, e.event_id, tg.est_id, tg.amount
from TEM_GT tg join
     EVENT ee
     on tg.trans_id = e.trans_id   
where e.flag = 'N'

您的语法insert不正确,这表明您编辑了查询,删除了有问题的部分。

于 2013-04-08T07:05:02.683 回答
1

我的第一直觉是使用DISTINCT. 然后我注意到重复项有不同的amount. 您需要决定amount使用哪个,然后应用适当的组功能。

示例(替换MAXSUM如果您愿意):

select event_low_id_s.nextval e.event_id, MAX(tg.est_id), SUM(tg.amount)
from TEM_GT tg join
     EVENT ee
     on tg.trans_id = e.trans_id   
where e.flag = 'N'
group by e.event_id
于 2013-04-08T07:12:03.543 回答