ورود

View Full Version : چگونه فیلد کلید رو تو دسته ای از رکوردها تغییر بدیم ؟



zharfa
سه شنبه 21 مهر 1394, 20:52 عصر
من جدولی دارم که توش 100 تا رکورده میام این جدول رو بر اساس تاریخ مرتب میکنم ولی میبینم شماره رکوردام بهم میریزه
میخوام ب ترتیب تاریخ که مرتب شده همونجوری هم مجددا شماره گذاری بشه
...


من خودم تو قسمت سی شارپ یک روشی رو رفتم اونم ب این شکله
از حلقه FOR استفاده کردم و جدول مرتب شده رو انداختم توی حلقه و گفتم ب ترتیب اولین رکورد رو شمارشو بذار 1 دومین رکورد رو شمارشو تغییر بده به 2 سومین رکوردو شمارشو تغییر بده به 3 و الی آخر
اما به یک مشکلی برخوردم اونم این بود که من رکورد شماره 1 رو دارم و زمانی که میگم رکورد اول رو بذار 1 خطا میگیره میگه موجوده ...

برای همین اومدم همین کار رو تو دو مرحله انجام دادم
بیشترین مقدار فیلد کد رو گرفتم مثلا شد 100 اومدم همین حلقه رو نوشتم و گفتم که اولین رکوردو بزن101 دومیشو بزن102 و الی آخر ...
چون دیگه 101 و 102 و ... وجود نداشت اوکی داد ...
و بعدش اومدم همین رکوردهارو مجددا از شماره 1 شماره گذاری کردم
جواب هم گرفتم
ولی نمیدونم راه خوبی رفتم یا نه ...
هر چی فکر کردم این ب ذهنم رسید

آیا کسی کمکی میکنه؟

محمد آشتیانی
چهارشنبه 22 مهر 1394, 02:18 صبح
سلام
دقیقا چه کاری میخوای انجام بدی؟
مشخصا فیلدی که بعنوان کلید (Identity) تعریف شده نباید تغییر کنه ، اگر میخوای یه شماره ردیف برای نمایش داشته باشی ، چیزی شبیه به این میشه.


فرض کن جدولی به نام Persons با این فیلدها داری
ID \ Name \ Family

کوئری به این شکل خواهد شد (در بخش order by ، نام فیلدی که میخوای مرتب سازی بر اساس اون انجام بشه رو بنویس)
SELECT ROW_NUMBER() OVER (ORDER BY ID) AS row , * FROM Persons



موفق باشید.

zharfa
پنج شنبه 23 مهر 1394, 15:48 عصر
ممنون
من میخوام کد رو مجددا شماره گذاری کنم ...

ببینید اول کد رکوردام ب این شکله

1
2
3
4
5
درست؟
حالا میام بر حسب تاریخ مرتب میکنم
رکوردام میشه اینجوری

2
5
6
4
1
3

چه جوری اینو مرتب کنم ؟

zharfa
پنج شنبه 23 مهر 1394, 15:52 عصر
اون rownumber رو متوجه نشدم چی هست ...یا as row ///
میشه لطفی بکنید و بیشتر توضیح بدید؟

hamid_hr
پنج شنبه 23 مهر 1394, 15:58 عصر
ببینید این ROW_NUMBER() میاد یه شماره ردیف براتون درست میکنه
شما میخواین برانمایش اینا بر اساس تاریخ مرتب بشن و نمایش داده بشن دیگه.
خب از همون ROW_NUMBER() استفاده کنید و اصلا مقدارد ID جدولتون رو نمایش ندین

zharfa
پنج شنبه 23 مهر 1394, 16:00 عصر
من کد شما رو نوشتم اومد یه ستون row رو ایجاد کرد
اما شماره رکوردام همونجوری موند ...

zharfa
پنج شنبه 23 مهر 1394, 16:03 عصر
آخه من ب مقدار آی دیم احتیاج دارم ...
اونا کد اسناد من هستش
مثلا من نیاز دارم که سندی با کد 1 حتما تاریخش 94/1/1 باشه
متوجه منظورم میشید؟

zharfa
پنج شنبه 23 مهر 1394, 16:05 عصر
من اگه تو سی شارپ با یه حلقه این آی دی ها رو ویراش کنم مشکلی داره مگه؟

zharfa
پنج شنبه 23 مهر 1394, 16:09 عصر
من ب صورت نمادین نمیخوام
میخوام واقعا اصلاحات صورت بگیره

hamid_hr
پنج شنبه 23 مهر 1394, 16:10 عصر
اونا(آیدی ها) به صورت identity تنظیم شدن آیا؟
یا شما وقت ثبت دستی بهشون مقدار میدین

zharfa
پنج شنبه 23 مهر 1394, 16:15 عصر
منظورتونو متوجه نمیشم .. موقع ثبت رکورد کاربر مقادیرشو میده هم اونو و هم بقیه مشخصاتو

hamid_hr
پنج شنبه 23 مهر 1394, 16:21 عصر
از الحاظ برنامه نویسی راخ حل خودتون درسته
ولی ار لحاظ منطقی من یه سند ثبت میکنم با مثلا شماره سند 1001 و برا خودم این شماره رو حفظ میکنم
و بعد از یه مدت که میام وقتی شماره سند 1001 رو میزنم توقع دارم سند من بیاد نه یه سند دیگه.
شما باید بگین دقیقا اینا رو میخواین چکار کنین؟
میخواین اینا رو فقط نمایش بدین به کاربر یا تو یه فرم نمایش بدین و بعد کاربر تغییر بده و بعد ذخیره کنه؟
یا هر چی

zharfa
پنج شنبه 23 مهر 1394, 16:47 عصر
من ی جدولی دارم که مشخصات اسناد توش هست شماره سند اسم سند و ....
خب مسلما این جدولو کاربر میبینه دیگه ...
وثلا سند 1 رو میخواد ...
یا هر سند دیگه ای ...
بعد از درج یکسری اطلاعات میبینه تاریخا جابجا شدن و اولین سند که تاریخش 94/1/1 هستش شمارش شده 120
حالا من میخوام این سند شماره 120 تبدیل بشه ب شماره 1
یعنی فقط میخوام شمارش عوض شه