我需要将DB2表中的某一行乘以18000次。某些列值将保留为原始值,而某些列值则需要增加1。
我对DB2知之甚少,我找不到关于如何做到这一点的具体简单答案。有人可以给我一个如何实现这个目标的例子吗?
DB2版本:9.7 / OS:Windows 2k8
例如,我有下表:
T_RES_TABLE
Col1 |Col2|Col3 |Col4|
----------------------
1 | 1| 1| 1|
我需要做的是:
T_RES_TABLE
Col1 |Col2|Col3 |Col4|
----------------------
1 | 1| 1| 1| - original
----------------------
2 | 1| 2| 1|
----------------------
.
.
.
----------------------
18000| 1|18000| 1|
所以Col1和Col3需要增加,其余的必须保持不变。希望它足够清楚。
答案 0 :(得分:4)
您可以使用递归查询生成新的列值:
$ db2 "create table t_res_table (col1 int, col2 int, col3 int, col4 int)"
DB20000I The SQL command completed successfully.
$ db2 "insert into t_res_table values (1,1,1,1)"
DB20000I The SQL command completed successfully.
$ db2 "select * from t_res_table"
COL1 COL2 COL3 COL4
----------- ----------- ----------- -----------
1 1 1 1
1 record(s) selected.
$ db2 "insert into t_res_table \
>with t (col1, col2, col3, col4, lvl) as ( \
>select col1, col2, col3, col4, 1 from t_res_table where col1 =1 \
>union all \
>select col1+1, col2, col3+1, col4, lvl+1 from t where lvl <18) \
>select col1, col2, col3, col4 from t where col1 > 1"
DB20000I The SQL command completed successfully.
$ db2 "select * from t_res_table"
COL1 COL2 COL3 COL4
----------- ----------- ----------- -----------
1 1 1 1
2 1 2 1
3 1 3 1
4 1 4 1
5 1 5 1
6 1 6 1
7 1 7 1
8 1 8 1
9 1 9 1
10 1 10 1
11 1 11 1
12 1 12 1
13 1 13 1
14 1 14 1
15 1 15 1
16 1 16 1
17 1 17 1
18 1 18 1
18 record(s) selected.
答案 1 :(得分:2)
这将完成你的工作。只需根据需要更改它,更改表名称和列名称并点击运行。 我不知道你想要实现什么但是,听起来你只需要一张表中的虚拟数据。所以,我只是为了虚拟目的。
根据您的其他要求修改它。下面的示例包含您需要的所有内容,但您可能需要根据该修改。
DECLARE @I INT=0
SET @I=1
DECLARE @LASTF2 INT
DECLARE @LASTF4 INT
SELECT @LASTF2=ISNULL(MAX(F2),1) FROM TEST --JUST CHANGE TEST TO YOUR TABLENAME, AND F1,F2,F3,F4
SELECT @LASTF4=ISNULL(MAX(F4),1) FROM TEST -- AS YOUR FIELD NAMES
WHILE @I<10000
BEGIN
INSERT INTO TEST (F1,F2,F3,F4)
VALUES (@I,@LASTF2,@I,@LASTF4)
SET @I=@I+1
END
GO
SELECT * FROM TEST