sql - 使用案例条款更新
问题描述
如何在 SQL Management Studio 中使用基于以下查询的 case 子句执行更新:
SELECT
CASE WHEN t1.building is null THEN 0
ELSE t1.building END AS Building,
t1.id,
CASE WHEN t1.building is null THEN 0
ELSE t2.count END AS Count
FROM table t1
JOIN (SELECT building, COUNT(*) as count
FROM table
GROUP BY building) AS t2 ON t2.building = t1.building OR (t2.building is
null AND t1.building is null)
以下不起作用:
Update table
Set count=(Select count from table where count in(
SELECT
CASE WHEN t1.building is null THEN 0
ELSE t1.building END AS Building,
t1.id,
CASE WHEN t1.building is null THEN 0
ELSE t2.count END AS Count
FROM table t1
JOIN (SELECT building, COUNT(*) as count
FROM table
GROUP BY building) AS t2 ON t2.building = t1.building OR (t2.building is
null AND t1.building is null))
我的目标是使用基于每个 ID 号的原始查询的值更新计数列。
从:
ID Building Count
1 10
2 10
3 11
4 11
5 11
6 Null
期望的结果:
ID Building Count
1 10 2
2 10 2
3 11 3
4 11 3
5 11 3
6 Null 0
解决方案
你可以尝试JOIN UPDATE
使用CASE WHEN
UPDATE t1
SET Count = CASE WHEN t1.Building IS NULL THEN 0 ELSE t2.cnt END
FROM T t1
LEFT JOIN (
select Building,COUNT(Building) cnt
from T
GROUP BY Building
) t2 on t1.Building = t2.Building
推荐阅读
- flutter - 有没有更好的方法来产生这种效果?[自定义底部]
- bash - 如何在 Mac 上更改文件名的顺序
- javascript - 反应类道具 onclick
- r - geom_dumbell 间距,异地传说,多重美学(时间线)
- c# - ASP.Net 日期时间剧
- html - 基于元素宽度的 CSS 媒体查询
- javascript - 数组最初为空,但在用于过滤的文本字段中输入后,它已满
- c++ - 向量的分段错误,但不确定我做错了什么
- java - AdMob 未显示实时广告
- android-emulator - Windows 10 21296 AMD - Android 模拟器 WHPX 错误