sql - sql中行的成对交换
问题描述
我有一个包含阈值类型和值的设备设置表。假设ThresholdType = 0 是 Min 并且 ThresholdType = 1 是 Max
初始表如下所示:
DeviceID ThresholdType ThresholdValue
1 0 5
1 1 10
2 0 15
2 1 20
3 0 21
3 1 34
4 0 1
4 1 8
然后我不得不改变 ThresholdType 的含义 - 0 变成 Max threshold , 1 变成 Min one。
我希望桌子看起来像这样:
DeviceID ThresholdType ThresholdValue
1 0 10
1 1 5
2 0 20
2 1 15
3 0 34
3 1 21
4 0 8
4 1 1
是否可以使用没有循环的单个 SQL 更改更新它?
解决方案
只需交换ThresholdType
:
UPDATE t SET ThresholdType = CASE ThresholdType
WHEN 1 THEN 0
WHEN 0 THEN 1
ELSE ThresholdType
END
只执行一次查询。
推荐阅读
- kubernetes - 在 Kubernetes 部署中设置 securityContext
- reactjs - 警告样式组件中的错误样式
- postgresql - 如何将 postgresql 数据库从本地复制到 Web 服务器
- visual-studio - Visual Studio - 协调 TFS 门控构建关闭所有打开的文档,包括其他构建状态
- javascript - 保存数据时引用其他模型 Express/Mongoose
- python-3.x - 如何使用 plotly 在地理空间地图上制作风颤图?
- html - 导航栏子菜单默认打开
- javascript - JS Array.reduce:遇到“未捕获的类型错误:无法读取未定义的属性 [...]”
- git - 在 Bitbucket 中丢弃一个混乱的 git fork
- c# - 在 `LINQ to Entities` 中使用 `System.String Concat` 会生成 `CAST`s 而不是 `CONCAT`