2012-10-07 53 views
1

需要在3個新行中複製1行,每個新行的序列號+1遞增查詢選擇一個記錄,並在序列號列中增加3個副本記錄,每個記錄的最大值爲+1

insert into t1 (column1,column2,column3,sequencecolumn) 
( **row1 
select *from t1 (column1,'101',column3,sequencecolumn) 
(select max (sequencecolumn)+1 where column1 ='abc') 
where column1 = 'abc' 
) 
( ***row2 
select *from t1 (column1,'102',column3,sequencecolumn) 
(select max (sequencecolumn)+1 where column1 ='abc') 
where column1 = 'abc' 
) 
( ***row3 
select *from t1 (column1,'103',column3,sequencecolumn) 
(select max (sequencecolumn)+1 where column1 ='abc') 
where column1 = 'abc' 
) 
+0

我需要選擇行,其中列1 = ABC和列2 = 100 ABC,100,SEQ1 .... ............ row1 ....................... abc,100,seq2 ........ RO ....... w2 ........................ abc 099,seq3 ................ row3 ... ..................... 現在如果我需要'sec'.ie的最大seq數。 seq3 但我只需要獲取記錄'abc'和'100' 並複製它,但計數序列應該是seq4 主鍵是'abc'+ seqnumber列..不是列2具有值100 什麼在這種情況下做 –

回答

1

我可能會嘗試這樣的事情(如果我有一個DB2安裝方便):

INSERT INTO t1 (
    column1, 
    column2, 
    column3, 
    sequencecolumn 
) 
SELECT 
    t.column1, 
    v.column2, 
    t.column3, 
    MAX(t.sequencecolumn) + v.rn 
FROM t1 t 
CROSS JOIN (VALUES (1, '101'), (2, '102'), (3, '103')) v (rn, column2) 
GROUP BY 
    t.column1, 
    t.column3, 
    v.column2, 
    v.rn 
WHERE t.column1 = 'abc' 
; 
+0

什麼是v.rn在這裏? –

+0

'v.rn'是'v'內聯表(用VALUES子句定義的那一列)中的兩列之一。另一個是'column2'(你可能想要命名不同,我只是選擇了這個名字來匹配't1'中的'column2') –