我有一个表,我试图根据聚合查询添加一个布尔标志字段。在没有提供客户信息的情况下尝试以最简单的形式表达这一点,我将表格MyTable称为字段An,Ver,Co和Rep。
MyTable
An Ver Co Rep NewFlag
A 1 Aa T
A 1 Ab F
A 1 Ac T
B 1 Ba F
B 1 Bb F
B 1 Bc T
C 1 Ca F
C 1 Cb T
C 1 Cc F
我想设置NewFlag =' T'对于An,Ver,Co的分组,只有一个Rep =' T'否则它可以保持为空。
我有一个查询标识了An,Ver,Co,其中Reps的计数=' T' = 1,并希望使用类似以下的结果网站作为我的条件来更新NewFlag字段
QueryResults
An Ver Co
B 1 Bc
C 1 Cb
在某种程度上,它会是这样的:
Update MyTable
Set NewFlag = 'T'
where
MyTable.An = QueryResults.An,
MyTable.Ver = QueryResults.Ver,
MyTable.Co = QueryResults.Co
QueryResults是我的查询的结果集,它标识那些只有一个Rep =' T'的记录。
除了使用脚本循环遍历并逐个更新记录之外,是否有语法可以插入我的查询以更新这些特定字段?
答案 0 :(得分:3)
您需要相关子查询或in
。像这样:
Update MyTable
Set NewFlag = 'T'
where (An, Ver, Co) in (select An, Ver, Co
from <your query>
);
答案 1 :(得分:0)
MERGE
非常适合这种作业:
merge into mytable m
using ( select an, ver, co
from mytable
where rep = 'T'
group by an, ver, co
having count(*) = 1
) x
on ( m.an = x.an and m.ver = x.ver and m.co = x.co )
when matched then update set newflag = 'T'
;