【发布时间】:2021-01-27 13:01:48
【问题描述】:
我正在使用 Microsoft SQL Server,并且我的数据库中有一个如下所示的表:
Id groupName flag type
--------------------------------
1 aaa 0 0
2 aaa 1 0
3 aaa 0 0
4 bbb 0 0
5 bbb 0 0
6 bbb 0 0
我想根据同一张表中特定记录的计数来更新type 列的值。
假设记录按其groupName分组,如果一个组至少有1条flag = 1的记录,则同一组中所有记录的type值应为1,否则为0。
就我而言,我希望得到以下输出。
Id groupName flag type
--------------------------------
1 aaa 0 1
2 aaa 1 1
3 aaa 0 1
4 bbb 0 0
5 bbb 0 0
6 bbb 0 0
如何使用 SQL 语句做到这一点?
编辑
当然,以下是行不通的。
UPDATE t1
SET type = CASE
WHEN ((SELECT COUNT(*) FROM tg) > 0)
THEN 1
ELSE 0
END
FROM [sampleDB].[dbo].[groups] t1
JOIN (SELECT t2.groupName, t2.flag
FROM [sampleDB].[dbo].[groups] t2) tg ON tg.groupName = t1.groupName
AND tg.flag = 1;
【问题讨论】:
-
@Dale K 以下不起作用。 UPDATE t1 SET type = CASE WHEN ((SELECT COUNT(*) FROM tg) > 0) THEN 1 ELSE 0 END FROM [sampleDB].[dbo].[groups] t1 JOIN (SELECT t2.groupName, t2.flag FROM [ sampleDB].[dbo].[groups] t2) tg ON tg.groupName = t1.groupName AND tg.flag = 1;
标签: sql sql-server tsql