我又遇到了一个问题:D 首先是一点信息:我试图将数据从一个表复制到另一个表(结构相同)。现在需要增加一个单元格,每组从 1 开始(就像历史一样)。
我有这张桌子:
create table My_Test/My_Test2 (
my_Id Number(8,0),
my_Num Number(6,0),
my_Data Varchar2(100));
(my_Id、my_Num 是嵌套的 PK)
如果我想插入一个新行,我需要检查值是否my_id
已经存在。
如果这是真的,那么我需要my_Num
为这个 ID 使用下一个。
我的表中有这个:
My_Id My_Num My_Data
1 1 'test1'
1 2 'test2'
2 1 'test3'
如果我现在为my_Id
1 添加一行,该行将如下所示:我的表中有这个:
My_Id My_Num My_Data
1 3 'test4'
这听起来很容易,现在我需要在 SQL 和 SQL Server 上制作它,我遇到了同样的问题,我使用了这个:
Insert Into My_Test (My_Id,My_Num,My_Data)
SELECT my_Id,
(
SELECT
CASE (
CASE MAX(a.my_Num)
WHEN NULL
THEN 0
Else Max(A.My_Num)
END) + b.My_Num
WHEN NULL
THEN 1
ELSE (
CASE MAX(a.My_Num)
WHEN NULL
THEN 0
Else Max(A.My_Num)
END) + b.My_Num
END
From My_Test A
where my_id = 1
)
,My_Data
From My_Test2 B
where my_id = 1;
如果在子选择中未找到任何行,则此 Select 将返回 null
有没有办法让我可以在这种情况下使用 max ?如果它返回 null 它应该使用 0 还是 1?
编辑:我现在使用这个:
Insert INTO My_Test ( My_Id,My_Num,My_Data )
SELECT B.My_Id,
(
SELECT COALESCE(MAX(a.My_Num),0) + b.my_Num
FROM My_Test A
Where a.My_Id = b.My_Id)
,b.My_Data
FROM My_Test2 B
WHERE My_Id = 1
THX 到 Bharat 和 OMG 小马
迎接
奥罗