# پایگاه‌های داده > SQL Server > T-SQL >  مقدار دهی به یک فیلد در رکورد های جدول به صورت عدد افزایشی

## mostafa_shaeri_tj

سلام.

یک جدول دارم که به این صورت هست :

id,type,no,name

این جدول حاوی 50000 رکورد هست. که فیلد no شماره یک جنس  و فیلد type نوع یک جنس رو نشون میده.
در حال حاضر  فیلد no رکوردها مقدار نداره. سوال اینجاست :

چطور میتونم به فیلد no ی رکورد هایی که type آنها 1 است مقدار بدم؟ خوب اینکه خیلی سادست! منظور من اینه که چطور مقداری که به رکورد اول میدم 10 و رکورد دوم 11 و ...! یعنی مقدار دهی به صورت افزایشی باشه

----------


## mohammadsafari

میتونی یه کرسر ساده بنویسی در غالب یک Query که کارتو انجام بده

مثال های ساده وجود داره یه سرچ کنی پیدا می کنی

----------


## mostafa_shaeri_tj

ممکنه یه مثال ساده بزنید.
 من یه راهی که فکر میکنم خیلی هم استاندارد نیست پیدا کردم. یه کپی از جدول بگیرم و نوع فیلد ام رو auto incriment بگیرم و با یک insert  و select تو در تو رکورد های مورد نظرم رو تو جدول جدید درج کنم . فیلدی هم که auto incriment تعریف کرئم خودش خودکار به ازای هر رکورد شماره میندازه

----------


## Reza_Yarahmadi

چیزی که من از سوالتون فهمیدم اینه که شما میخواید به ازا هر Type فیلد No از یه مقدار خاصی بصورت افزایشی آپدیت بشه. 
برای این مورد روشهای مختلفی وجود داره ، کد زیر در هر ورژن از SQL Server جواب میده 
Declare @Tbl Table (ID int Identity(1, 1), Type int, NO int)

Insert Into @Tbl Values (1, Null)
Insert Into @Tbl Values (2, Null)
Insert Into @Tbl Values (3, Null)
Insert Into @Tbl Values (3, Null)
Insert Into @Tbl Values (2, Null)
Insert Into @Tbl Values (1, Null)
Insert Into @Tbl Values (1, Null)
Insert Into @Tbl Values (2, Null)
Insert Into @Tbl Values (2, Null)
Insert Into @Tbl Values (3, Null)
Insert Into @Tbl Values (3, Null)
Insert Into @Tbl Values (3, Null)
Insert Into @Tbl Values (1, Null)
Insert Into @Tbl Values (2, Null)

Update @Tbl Set
    NO = Rank
From (
Select
    Rank = Count(*)
    ,T1.ID
    ,T1.Type
From
    @Tbl T1, @Tbl T2
Where
    T1.ID >= T2.ID
    AND
    T1.Type = T2.Type
Group By
    Type, ID) T
INNER JOIN @Tbl tbl
ON
    T.ID = tbl.ID



Select * From @Tbl Order By Type, NO

----------


## Saeid59_m

منم همین سوال رو دارم لطفا راهنمائی کنید 
فرض کنید یه جدول با سه فیلد a , b, c دارید با 5000 رکورد .

فیلد ها همه عددی هستند و فیلد a  مقدار ندارد 

حالا می خواهیم رکوردهایی از جدول که فیلد c اونها برابر 5 هست ، فیلد a اونها به صورت افزایشی شماره بخوره

----------


## Mahmood_M

> منم همین سوال رو دارم لطفا راهنمائی کنید
> فرض کنید یه جدول با سه فیلد a , b, c دارید با 5000 رکورد .
> 
> فیلد ها همه عددی هستند و فیلد a مقدار ندارد
> 
> حالا می خواهیم رکوردهایی از جدول که فیلد c اونها برابر 5 هست ، فیلد a اونها به صورت افزایشی شماره بخوره


یک متغیر تعریف کنید و به صورت زیر درون Update ازش استفاده کنید :
DECLARE @AValue INT 
SET @AValue = 0 
UPDATE MyTable SET @AValue = A = @AValue + 1 Where C = 5
* اگر SQL Server 2008 استفاده می کنید می تونید مقدار اولیه بدید به متغیر :
DECLARE @AValue INT = 0 
UPDATE MyTable SET @AValue = A = @AValue + 1 Where C = 5
با تغییر مقدار "1" می تونید گام افزایش رو تغییر بدید ...

----------


## Saeid59_m

مرسی از پاسختون
حالا اگه بخوام جدول بر اساس یه ستون خاص مرتب بشه و بعد این شماره گذاری انجام بشه چطور ؟

----------


## Mahmood_M

> مرسی از پاسختون
> حالا اگه بخوام جدول بر اساس یه ستون خاص مرتب بشه و بعد این شماره گذاری انجام بشه چطور ؟


تست نکردم ولی با استفاده از CTE باید بشه :

DECLARE @AValue INT = 0; 
WITH CTEList AS (SELECT * FROM MyTable WHERE C = 5
                 ORDER BY MyField DESC)
UPDATE CTEList SET @AValue = A = @AValue + 1;

----------

