我有如下的sql表
+-----------------------------+
| |col1 | col2 | col3| col4| |
+-----------------------------+
| _______________________ |
| | a | 3 | d1 | 10 | |
| | a | 6 | d2 | 15 | |
| | b | 2 | d2 | 8 | |
| | b | 30 | d1 | 50 | |
+-----------------------------+
我想将上面的表格转换为下面的表格,其中
col4 = col4 - (col4 % min(col2) group by col1)
+------------------------------+
| |col1 | col2 | col3| col4| |
+------------------------------+
| ____________________________ |
| |a | 3 | d1 | 9 | |
| |a | 6 | d2 | 15 | |
| |b | 2 | d2 | 8 | |
| |b | 30 | d1 | 50 | |
| |
+------------------------------+
我可以在应用程序代码中阅读上表来手动进行转换,想知道是否有可能将转换卸载到sql
答案 0 :(得分:1)
您可以使用多表UPDATE
来实现所需的结果,将表连接到MIN(col2)
值的表中:
UPDATE table1
SET col4 = col4 - (col4 % t2.col2min)
FROM (SELECT col1, MIN(col2) AS col2min
FROM table1
GROUP BY col1) t2
WHERE table1.col1 = t2.col1
输出:
col1 col2 col3 col4
a 3 d1 9
a 6 d2 15
b 2 d2 8
b 30 d1 50
答案 1 :(得分:1)
为此只需运行一个简单的select
查询:
select col1, col2, col3,
col4 - (col4 % min(col2) over (partition by col1))
from t;
不需要实际修改表。