如何使用給定的重復編號序列更新行。我的表如下
| 線型 | line_val | 線模式 |
|---|---|---|
| 一種 | 1 | 空值 |
| 一種 | 2 | 空值 |
| 乙 | 5 | 空值 |
| 乙 | 6 | 空值 |
| C | 3 | 空值 |
| C | 4 | 空值 |
現在我想用 8532 的重復模式更新列值所以更新后的表看起來像
| 線型 | line_val | 線模式 |
|---|---|---|
| 一種 | 1 | 8 |
| 一種 | 2 | 5 |
| 乙 | 5 | 3 |
| 乙 | 6 | 2 |
| C | 3 | 8 |
| C | 4 | 5 |
我怎樣才能在更新陳述句中實作這一點?
uj5u.com熱心網友回復:
根據您提供的資料,無法滿足您的要求。表中的資料不是按特定順序存盤的。如果希望在 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
uj5u.com熱心網友回復:
如果您不關心訂單,請使用以下表格:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/336364.html
上一篇:排除SQL中低于最大值的dup
下一篇:使文本欄位僅接受APEX中的數值
