SQL查询通过基于类别递增ID来复制行

时间:2015-05-20 06:21:41

标签: sql sql-server database tsql

我有一个有两列的表

如果类别名称相同,则类别ID将相同

CatID CatName

1       Cat1
1       Cat1
1       Cat1
2       Cat2
2       Cat2
3       Cat3
3       Cat3
3       Cat3

我想将上面的表行复制到同一个表中,以获得如下所示的结果

CatID CatName
1       Cat1
1       Cat1
1       Cat1
2       Cat2
2       Cat2
3       Cat3
3       Cat3
3       Cat3
4       Cat1
4       Cat1
4       Cat1
5       Cat2
5       Cat2
6       Cat3
6       Cat3
6       Cat3

CatID 4是CATID的前+ 1

我知道,我可以使用以下查询:

 insert into [table1]  
 select (SELECT MAX([CatID]) from [table1]) +
 ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as [CatID], CatName 
 from [table1]

给出如下所示的结果,我不想要。

CatID CatName

4       Cat1
5       Cat1
6       Cat1
7       Cat2
8       Cat2
9       Cat3
10      Cat3
11      Cat3

这里,CatID正在递增,我需要根据类别增加catid。

1 个答案:

答案 0 :(得分:1)

你复杂了你的select语句。试试这个:

INSERT INTO Table1
SELECT CatId + (SELECT MAX(CatId) FROM Table1), CatName
FROM Table1

see fiddle

注意:我同意Amit的评论:这是一个糟糕的设计 我想不出任何应该在任何表中插入相同行的情况。