0

使用 SQL Server 2005

表格1

Code ID (identity field)

001 1
001 2
002 1
003 1
003 2

如何根据代码创建身份字段。

需要查询帮助

4

5 回答 5

2

像这样:

ALTER TABLE dbo.YourTable
ADD NewColumn INT IDENTITY(1,1) 

您可以将seed(起始值)定义为第一个参数,将step(增量)定义为第二个参数 - 所以选择对您有意义的任何内容;seed=1 和 step=1 似乎都是最常用的默认值。

该列将在创建时添加并填充值。

于 2013-06-17T11:20:52.127 回答
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;

请参阅演示

如果您继续为每个添加新行,那么在您的表中存储这个值将很难维护,当您查询数据时 code可能更容易实现。row_number()

于 2013-06-17T11:22:06.367 回答
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'
于 2013-06-17T11:23:02.483 回答
0

使用ROW_NUMBER

SELECT
  code, 
  ROW_NUMBER() OVER(PARTITION BY code ORDER BY code) AS ID
FROM Table1
于 2013-06-17T11:27:31.103 回答
-1

从那里得到它count

DECLARE @ID int = (
    SELECT COUNT(*) + 1 from test_1 WHERE [Code] = @CODE )
于 2013-06-17T11:23:43.823 回答