Oracle SQL以重复模式更新行



如何使用给定的重复数字序列更新行。我的表格如下

<表类> line_type line_val line_pattern tbody><<tr>1空2空B5空B6空C3空C4空

根据您提供的数据,不可能满足您的要求。表中的数据不是按特定顺序存储的。如果您希望在select语句中保证顺序,则需要提供ORDER BY子句。

在下面的代码中有一个额外的列"ORDER_BY"指定需要处理记录的顺序。使用MOD函数计算重复模式,将行号转换为4个数字的重复序列,然后CASE将每个数字映射到其各自的模式位置。

WITH test_data (order_by, line_type, line_val)
AS
(
SELECT 1, 'A',1 FROM DUAL UNION ALL 
SELECT 2, 'A',2 FROM DUAL UNION ALL 
SELECT 3, 'B',5 FROM DUAL UNION ALL 
SELECT 4, 'B',6 FROM DUAL UNION ALL 
SELECT 5, 'C',3 FROM DUAL UNION ALL 
SELECT 6, 'C',4 FROM DUAL  
)
SELECT
CASE MOD(ROW_NUMBER() OVER (ORDER BY order_by),4)
WHEN 1 THEN 8
WHEN 2 THEN 5
WHEN 3 THEN 3
WHEN 0 THEN 2
END as line_pattern,
t.*
FROM
test_data t
LINE_PATTERN   ORDER_BY L   LINE_VAL
------------ ---------- - ----------
8          1 A          1
5          2 A          2
3          3 B          5
2          4 B          6
8          5 C          3
5          6 C          4

如果你不关心顺序,那么使用这个形式:

UPDATE mytable
SET line_pattern =
CASE MOD (ROWNUM, 4)
WHEN 1 THEN 8
WHEN 2 THEN 5
WHEN 3 THEN 3
WHEN 0 THEN 2
END

最新更新