使用SQL Server 2005
表1
Code ID (identity field)
001 1
001 2
002 1
003 1
003 2
如何根据代码创建身份字段。
需要查询帮助
答案 0 :(得分:2)
就像这样:
ALTER TABLE dbo.YourTable
ADD NewColumn INT IDENTITY(1,1)
您可以将seed
(起始值)定义为第一个参数,将step
(增量)定义为第二个参数 - 因此选择对您有意义的内容; seed = 1和step = 1似乎是最常用的默认值。
该列将在其创建时添加并填充值。
答案 1 :(得分:2)
您似乎希望实施row_number()
,这会根据您拥有的id
值的数量增加code
值:
select code, id
from
(
select code,
row_number() over(partition by code order by code) id
from yourtable
) d;
使用row_number()
可以在查询表格中的数据时计算值。请参阅SQL Fiddle with Demo。
如果您想使用此值更新表格,则可以使用以下内容:
;with cte as
(
select code, id,
row_number() over(partition by code order by code) rn
from yourtable
)
update cte
set id = rn;
见Demo。
如果您继续为每个code
添加新行,则很难维护在表中存储此值,在查询数据时可能更容易实现row_number()
。
答案 2 :(得分:0)
(在重新阅读您的问题时,我发现您的id
列不是唯一的,因此它不能是标识列。)
要创建使用Code
列中的初始值的标识字段,您可以:
-- Create an empty copy of your table
select top 0 *
into CopiedTable
from YourTable;
-- Add an identity column
alter table CopiedTable add id int identity;
-- Copy the rows over, while initializing the identity column from Code
set identity_insert dbo.CopiedTable on
insert dbo.CopiedTable
(id, Code)
select Code
, Code
from dbo.YourTable;
set identity_insert dbo.CopiedTable off
-- Drop the old table
drop table dbo.YourTable
-- Rename the copied table
exec sp_rename 'CopiedTable', 'YourTable'
答案 3 :(得分:0)
SELECT
code,
ROW_NUMBER() OVER(PARTITION BY code ORDER BY code) AS ID
FROM Table1
答案 4 :(得分:-1)
从count
DECLARE @ID int = (
SELECT COUNT(*) + 1 from test_1 WHERE [Code] = @CODE )