bet*_*eta 3 sql-server join aggregate sql-update
我有一张看起来如下的表格
ID | action | flag
1 | A | 1
1 | A | 1
1 | B | 1
2 | A | 1
2 | A | 1
2 | B | 1
2 | B | 1
Run Code Online (Sandbox Code Playgroud)
我想执行以下操作:如果对于相同的ID的值乙在动作列出现多于1次,然后我想将设置标志此列ID到0。
结果应如下所示:
ID | action | flag
1 | A | 1
1 | A | 1
1 | B | 1
2 | A | 0
2 | A | 0
2 | B | 0
2 | B | 0
Run Code Online (Sandbox Code Playgroud)
我知道有两种方法可以做到这一点:
join随原表的临时表中查找的ID为我将将标志设置为0除了上面解释的两个之外,还有其他选择吗?理想情况下在一个查询中(没有子查询和临时查找表)。我正在考虑类似 a JOINwhereJOIN子句包含 a GROUP BYand 之类的东西HAVING,但直到现在我才成功..
这样的事情应该适合你:
UPDATE t
SET flag = 0
FROM Table t
INNER JOIN
(
SELECT Id
FROM Table
WHERE action = 'B'
GROUP BY Id
HAVING COUNT(*) > 1
) d ON t.Id = d.Id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3821 次 |
| 最近记录: |