San*_*yak 3 sql-server sql-server-2008
大家好,我想根据子记录更新父表的状态。
条件是。
具有该字段的子记录
Isclosed。
Isclosed=1则父记录状态=1Isclosed=1则父记录状态=2我试过这个:
update Parent set Status=1
where id in(
select ParentID from Child where
Isclosed=1
group by ParentID having count(id)=(select count(id)from Child where Parent.id=ParentID))
Run Code Online (Sandbox Code Playgroud)
但它只满足1个条件。
您可以使用 aCTE来获取的记录COUNT的 s以及per的fo记录。然后将结果用于记录的状态:ChildIsClosed = 1COUNTChildParentCTEUPDATEParent
WITH Cte AS(
SELECT
p.Id,
ClosedCount = SUM(CASE WHEN c.IsClosed = 1 THEN 1 ELSE 0 END),
TotalCount = COUNT(*)
FROM Parent p
INNER JOIN Child c
ON c.ParentId = p.Id
GROUP BY p.Id
)
UPDATE p
SET p.Status =
CASE
WHEN c.ClosedCount = c.TotalCount THEN 1
WHEN c.ClosedCount = 0 THEN 3
ELSE 2
END
FROM Parent p
INNER JOIN Cte c
ON c.Id = p.Id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3713 次 |
| 最近记录: |