我对以下情况感到震惊。需要您的帮助,根据以下示例数据修改我的查询。我的目标是使用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
任何帮助进一步调整它以获得确切的结果。提前致谢
答案 0 :(得分:0)
据我所知,您的示例查询应根据条件返回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
上的语法不正确,这表示您编辑了查询,删除了有问题的部分。
答案 1 :(得分:0)
我的第一直觉是使用DISTINCT
。然后我注意到重复项有不同的amount
。
您需要决定使用哪个amount
,然后应用适当的组功能。
示例(如果您愿意,请替换MAX
和SUM
):
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