使用 SQL Server 2005
表格1
Code ID (identity field)
001 1
001 2
002 1
003 1
003 2
如何根据代码创建身份字段。
需要查询帮助
使用 SQL Server 2005
表格1
Code ID (identity field)
001 1
001 2
002 1
003 1
003 2
如何根据代码创建身份字段。
需要查询帮助
像这样:
ALTER TABLE dbo.YourTable
ADD NewColumn INT IDENTITY(1,1)
您可以将seed
(起始值)定义为第一个参数,将step
(增量)定义为第二个参数 - 所以选择对您有意义的任何内容;seed=1 和 step=1 似乎都是最常用的默认值。
该列将在创建时添加并填充值。
看起来您想要实现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;
请参阅演示。
如果您继续为每个添加新行,那么在您的表中存储这个值将很难维护,当您查询数据时 code
可能更容易实现。row_number()
(在重新阅读您的问题时,我发现您的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'
SELECT
code,
ROW_NUMBER() OVER(PARTITION BY code ORDER BY code) AS ID
FROM Table1
从那里得到它count
DECLARE @ID int = (
SELECT COUNT(*) + 1 from test_1 WHERE [Code] = @CODE )