假设这是我的目的地表:
Name | Reason for Visit | Visit Number | Visit_date
Dan | Foo | 1 | 04/03/2014
Henry| Bar | 1 | 05/07/2014
Dan | Tau | 2 | 08/10/2014
我的SOURCE表中已经有Name,Reason_For_Visit和Visit_Date,并且必须创建Visit_Number列。我是否可以像这样对仍在形成的目标表进行子查询,并获得正确的visit_number吗?
insert into DESTINATION
NAME,
REASON_FOR_VISIT,
(select count(d.Name)+1 from destination d where d.Name=Name) AS VISIT_NUMBER,
VISIT_DATE
from SOURCE
ORDER BY VISIT_DATE ASC;
如果逐行插入行,我觉得我应该得到正确的Visit_number。
答案 0 :(得分:3)
您的问题的答案是肯定 - 如果您插入第一行,第二个插入将看到目标表中已有的第一行。
但是,一行一行地完成这项工作是一种无效的方法。你为什么不尝试这样的事情:
insert into destination
select
name,
reason_for_visit,
row_number() over (partition by name order by visit_date) as visit_number,
visit_date
from source
row_number()函数将为您正确计算visit_number,并且使用一个查询插入所有行肯定会更有效。
祝你好运!