PDA

View Full Version : مشکل در مرتب سازی اعداد در یک فیلد



farhadamin
پنج شنبه 26 مرداد 1385, 10:01 صبح
با سلام
من در یک فیلد اعداد به صورت زیر دارم
12-3455-1999
15-3586-2000
12-5547-1998
11-2546-2001
29-5124-2006
22-8655-2006
اولا باید بگم که این اعداد یک استاندارد هستند و من نمی توانم اعداد را جا به جا کنم یا در دو فیلد بنویسم.
اعداد اول نشانه سال است که برای ما در مرتب سازی اهمیت ندارند....(مثل1999) من می خواهم کدی داشته باشم که چهار رقم اول که نشانه سال است را نادیده بگیرد و بر اساس شش رقم بعدی اعداد را مرتب کند.
مثلا در مثال بالا اعداد به صورت زیر باید مرتب شوند.
11-2546-2001
12-3455-1999
15-3586-2000
29-5124-2006
12-5547-1998
22-8655-2006
منظورم این است که اعداد اول که نشانه سال هستند را در مرتب سازی نادیده گرفته شوند . بر اساس رقم های بعدی مرتب شوند
امیدوارم که منظورم را خوب رسانده باشم... و امیدو وارم که هر چه زودتر کمک کنید.
ممنون

samaneh_h
پنج شنبه 26 مرداد 1385, 10:05 صبح
من پیشنهادم اینه که اول با دستورright بیا 7 کاراکتر سمت راست رو جدا کن و بریز تو یه فیلد و 4 کاراکتر سمت چپ رو با Left جدا کن و بریز تویه فیلد دیگه، بعد بر اساس اون فیلد 1 سورت کن بعد بیا دوباره اونارو باهم Concatenateکن

farhadamin
پنج شنبه 26 مرداد 1385, 10:07 صبح
من پیشنهادم اینه که اول با دستورright بیا 7 کاراکتر سمت راست رو جدا کن و بریز تو یه فیلد و 4 کاراکتر سمت چپ رو با Left جدا کن و بریز تویه فیلد دیگه، بعد بر اساس اون فیلد 1 سورت کن بعد بیا دوباره اونارو باهم Concatenateکن
سلام و تشکر از جواب سریعتون می شه بیش تر توضیح بدید.

samaneh_h
پنج شنبه 26 مرداد 1385, 10:09 صبح
اگه چند دقیقه صبر کنی برات یه نمونه سعی می‌کنم پیدا کنم

farhadamin
پنج شنبه 26 مرداد 1385, 10:13 صبح
اگه چند دقیقه صبر کنی برات یه نمونه سعی می‌کنم پیدا کنم
من فایل خودم رو برات می فرستم

ابته من خودم سغی کرم مرتب کنم اما با این کد
SELECT tabel1.jnr, tabel1.Læg, tabel1.Navn, tabel1.afd, tabel1.dato, tabel1.afleveres
FROM tabel1
ORDER BY Mid([jnr],6,4);

فقط بر اساس چهار رقم وسط مرتب شده است.
نه شش همه شش رقم اکه چک کنی متوجه می شی که اعداد ی که رقم های وسط شان یکی است و رقم های آحرشان فرق می کند به هم ریخته اند

samaneh_h
پنج شنبه 26 مرداد 1385, 10:34 صبح
این فایل رو ببین اگه مشکلت برطرف نشد بگو-همه کاری که می‌خوای رو اون Query انجام می‌ده

farhadamin
پنج شنبه 26 مرداد 1385, 11:02 صبح
این فایل رو ببین اگه مشکلت برطرف نشد بگو-همه کاری که می‌خوای رو اون Query انجام می‌ده
سلام ممنون

فکر کنم که بشه اما یه مشکل می مونه این که تو فایل من حدود چند هزار رکود هست و هر روز هم حدود 100 رکورد اضافه می شه... من باید همه رو دونه به دونه جدا کنم و توی دو تا فیلد جدید بنویسم.

می شه راه دیگه ای پیدا کرد یا این مشکل رو حل کرد.

samaneh_h
پنج شنبه 26 مرداد 1385, 11:22 صبح
ببین تو با این Query اصلاً نیازی به این نداری که خودت بشینی این کا رو بکنی
در حقیقتتو اطلاعات رو با هر ترتیبی که می‌خوای وارد می‌کنی و اون Query موقع گزارش دادن خودش مرتب می‌کنه اصلاً دیگه نیاز نیست تو فیلد تعریف کنی .اون پیشنهاد اولم رو فراموش کن و یه Query مثل اون چیزی که نوشتم رو بنویس و بذار پشت اون فرمی که می‌خوای اطلاعات سورت شده بهت نشون بده

farhadamin
پنج شنبه 26 مرداد 1385, 11:40 صبح
ببین تو با این Query اصلاً نیازی به این نداری که خودت بشینی این کا رو بکنی
در حقیقتتو اطلاعات رو با هر ترتیبی که می‌خوای وارد می‌کنی و اون Query موقع گزارش دادن خودش مرتب می‌کنه اصلاً دیگه نیاز نیست تو فیلد تعریف کنی .اون پیشنهاد اولم رو فراموش کن و یه Query مثل اون چیزی که نوشتم رو بنویس و بذار پشت اون فرمی که می‌خوای اطلاعات سورت شده بهت نشون بده
ببین می تونی توی اون فایلی که فرستادم انحام بدی من نمی تون انحام بدم یعنی errorمی ده و می دونم که اشتاه از خودمه.

samaneh_h
پنج شنبه 26 مرداد 1385, 11:56 صبح
ببین من برات درست کردم
اسم Query که می‌خوای Sort Query و اسم اون فرمی‌که می‌خوای برای گزارش سورت شده نشون بدی سورت فرم هست
یعنی تو اطلاعات رو وارد کن بعد سورت فرم رو ببین
اون کوئری خودش کار سورت رو انجام می‌ده بهش کار نداشته باش
اون کوئری فقط باید پشت همون فرمت باشه که داره نمایش اطلاعات سورت شده رو انجتم میده-من تا شنبه به سیستم دسترسی ندارم امیدوارم مشکلت برطرف بشه

farhadamin
پنج شنبه 26 مرداد 1385, 12:01 عصر
ببین من برات درست کردم
اسم Query که می‌خوای Sort Query و اسم اون فرمی‌که می‌خوای برای گزارش سورت شده نشون بدی سورت فرم هست
یعنی تو اطلاعات رو وارد کن بعد سورت فرم رو ببین
اون کوئری خودش کار سورت رو انجام می‌ده بهش کار نداشته باش
اون کوئری فقط باید پشت همون فرمت باشه که داره نمایش اطلاعات سورت شده رو انجتم میده-من تا شنبه به سیستم دسترسی ندارم امیدوارم مشکلت برطرف بشه
ببین من هنوز امتخان نکردم اما می خواستم از این که ایت قدر بهم کمک کردی تا نرفتی تشگر کنم..... دوست داشتم باحات بشتر آشنا بشم چون من مشگلاتم کم نیست.


خیلی خیلی ممنون

samaneh_h
پنج شنبه 26 مرداد 1385, 12:03 عصر
خواهش می‌کنم .ببین اگه مشکل داشتی Email‌بزن
اگه بتونم حل می‌کنم
Samaneh.homayouni@gmail.com

farhadamin
پنج شنبه 26 مرداد 1385, 12:08 عصر
ببین من هنوز امتخان نکردم اما می خواستم از این که ایت قدر بهم کمک کردی تا نرفتی تشگر کنم..... دوست داشتم باحات بشتر آشنا بشم چون من مشگلاتم کم نیست.


خیلی خیلی ممنون



من الان چک کردم.. خوبه اما توی اعدادی که رقم سومشون سه رقمیه با دو قمیه مثل 125-3455-1998 عمل نکرده
منظورم ایکه که اعدادی مثل 14 بالاتر از اعدد 4 قرار کرفته. چون رقم 1 خونده شده یا اعدادی مثل 134 بالاتر از 2 است.

karmand
شنبه 28 مرداد 1385, 09:23 صبح
ببخشید
اگر ساختار فیلدی را سورت شده بسازی لازم به سورت هر مرتبه نیست
فیلدی که جدیدا ساختی از right قدیمیها را index کن اگر تکراری داری ok duplicateو اگر تکراری نداری no duplicate در ضمن زمانی که ورود اطلاعات می کنی همان موقع فیلدی که باید سورت شده باشد را پر کن تا لازم نباشد هر مرتبه کواری سورت را احرا کنی

farhadamin
شنبه 28 مرداد 1385, 13:41 عصر
ببخشید
اگر ساختار فیلدی را سورت شده بسازی لازم به سورت هر مرتبه نیست
فیلدی که جدیدا ساختی از right قدیمیها را index کن اگر تکراری داری ok duplicateو اگر تکراری نداری no duplicate در ضمن زمانی که ورود اطلاعات می کنی همان موقع فیلدی که باید سورت شده باشد را پر کن تا لازم نباشد هر مرتبه کواری سورت را احرا کنی
ببخشید اما دقیقا متوجه منظورت نشدم... لطفا بیشتر توضیح دهید... ممنون

samaneh_h
شنبه 28 مرداد 1385, 15:07 عصر
خوب مشکل اول که برطرف شد.
بیبن می‌دونی چی کار کنی؟
1- اول باید بهت بگم اون برنامه ای که داشتی کد jnr مشکل داشت می‌دونی چرا.چون یک کد ثابت نبود و اکثرا بعد از او عددها یه سر نوشته هم داشت.بیا و اون نوشته ها رو بریز تو به فیلد دیگه بعد از روشی که دارم بهت می‌گم عمل کن
2- یک Query بنویس که کد jnr تو اینجوری تفکیک کنه
توی فیلد اول jnr رو انتخاب کن
توی فیلد دوم بنویس e:Mid([jnr];11 البته بعد 11 یه پرانتز بذار.اینجا نشد بذارم
خوب اگه اون کاری که که تو مرحله 1 گفتم انجام داده باشی الان باید اون رقم آخر رو نشون بده.
خوب تو فیلد بعدیش اینو بنویس
code:IIf(Len([e]))=1;"00" & [e];IIf(Len([e]))=3;"" & [e];"0" & [e]))
این علامتهای قبل از Code رو بنداز آخرe ، اینجا نمی‌دونم چرا اینجوری نشون می‌ده
code درنهایت همون چیزی رو که می‌خوای نشون می‌ده