假设你想说的是,FNAME/L-NAME对是唯一的关键,让你匹配的行:
declare @Folks as table (CustId int, Fname varchar(10), Lname varchar(10),
Address1 varchar(10), Address2 varchar(10),
Zip varchar(9), State varchar(2), LoadDate date, Flag char(1))
insert into @Folks (CustId, Fname, Lname, Address1, Address2, Zip, State, LoadDate, Flag) values
(1, 'John', 'Leo', 'xxx', 'xxx', '34532', 'VA', '1/1/2012', '-'),
(2, 'Mike', 'Saunder', 'xxx', 'xxx', '94090', 'CA', '1/1/2012', '-'),
(3, 'Mike', 'Saunder', 'rrr', 'xxx', '94090', 'CA', '2/1/2012', '-')
-- Before setting the Flag.
select * from @Folks
-- Computing a flying flag rather than using a stored value.
select *, case when LoadDate = (select MAX(LoadDate) from @Folks as S where S.Fname = O.Fname and S.Lname = O.Lname) then 'Y' else 'N' end as 'FlyingFlag'
from @Folks as O
-- Updating all stored values. Every bloody row.
update @Folks
set Flag = case when LoadDate = (select MAX(LoadDate) from @Folks as S where S.Fname = O.Fname and S.Lname = O.Lname) then 'Y' else 'N' end
from @Folks as O
-- Showing the result.
select * from @Folks
编辑: 我仍然认为这不是你想要走的方向。例如,除非您依赖CustId作为决胜手,否则它不会优雅地适应每位客户每天更新的更新。
一个稍微好一点的解决方案是用第一行中为客户的NULL值替换Flag,并在后面的行中包含被取代的行的CustId。这将每个客户的变化链接在一起,并在客户在单一日期重复更新的情况下提供定义明确的订单。
这两个Mikes不应该有相同的CustomerID吗? – 2012-01-27 23:19:26
“我是SQL新手,想要实现某些目标。”那么你想达到什么样的目的呢? – 2012-01-27 23:25:52
问题是什么? – 2012-01-27 23:26:58