首页 > 解决方案 > 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 更改更新它?

标签: sqlsql-server

解决方案


只需交换ThresholdType

UPDATE t SET ThresholdType = CASE ThresholdType
    WHEN 1 THEN 0
    WHEN 0 THEN 1
    ELSE ThresholdType
END

只执行一次查询。


推荐阅读