PDA

View Full Version : سوال: مرتب کردن کد داده های یک جدول بر اساس تاریخ با شرایط خاص!



netfa.ir
پنج شنبه 27 آبان 1389, 04:03 صبح
سلام دوستان خسته نباشید.
یه کوئری یکم پیچیده مخم رو از کار انداخته.
همه ی سایت رو زیرو رو کردم ولی به جواب نرسیدم.
رفرنس های فرنگی هم کاره ما رو راه ننداخت :لبخند:

و اما قضیه:

من مثلا یک جدولی دارم به اسم Names که از طریق فیلد Code (کلید اصلی) به قول مربوط جوین (رابطه) داره به فیلد CodeREF یه جدول به اسم Content.
حالا فیلدهای Names از این قرارن:

ID
Code
C
Name
Date

و جدول Content

CodeREF
Title
Email

خوب من برای اینکه این سیستم باید برای سالهای مختلف مشخصات رو دخیره کنه این کارو کردم که سال رو به کد اضافه می کنم (کد نویسی C#) و بعد میریزم تو CODE و کد همون کاربر رو می ریزم تو C

بدین شکل:

تو سال 1389 کاربر با کد 2
Code=13892
و
c=2

حالا من می خوام جدول names رو بر اساس تاریخ (که از نوع int) هست مرتب کنم به طوری که هم کد (c) و هم کد یکتا (code) با همین تاریخ مرتب بشه و تغییرات در جدول Contents هم اعمال بشه.

اساتید راه حلی چیزی میزیدارین.
ممنون میشم و سپاس گذارم از وقتتون.
یا علی

Reza_Yarahmadi
پنج شنبه 27 آبان 1389, 13:50 عصر
دوست عزيز من دقيقا متوجه نشد شما دنبال چه چيزي هستيد اگر چند داده خام و خروجي مورد انتظار اين داده ها را بذاريد بهتر ميشه كمكتون كرد.
اگر منظورتون اينه كه بر اساس سال و كد كاربر (C) مرتب بشه كه مرتب سازي رو بر اساس Code انجام بديد درست ميشه.

Select * From tbl1 inner join tbl2 on ... Order By Code
اگر هم ميخوايد بر اساس تاريخ كامل و كد باشه ، يعني اينكه اگر در يك روز چند كاربر ثبت شده اند كاربري كه كد كوچكتر دارد بالا نمايش داده شود ، اول بر اساس C مرتب كنبد و بعد بر اساس تاريخ

Select * From ... Order By C, Date

netfa.ir
پنج شنبه 27 آبان 1389, 22:17 عصر
ممنون رضا جان از توجهت.

نه متاسفانه منظورم این نبوده.

ببینید مثلا این داده های خام من هست.

جدول Names

به ترتیب: ID - Code - C - Name - Date

1 - 13891 - 1 - سعید - 13890830
2 - 13892 - 2 - رضا - 13890828
3 - 13893 - 3 - علی - 13890901

(ID سمت راست هست و تاریخ سمت چپ)

در جدول Contents

13891 - مالیات تعلق گرفته - Saeed@yahoo.com
13892 - مقاله در زمینه ی ژئو فیزیک - Reza@yahoo.com
13893 - عنوان 3 - ali@yahoo.com

حالا اگه دقت کنید می بینید که مثلا کاربر رضا تو تاریخ 1389/08/28 ثبت شده و به نوعی ترتیب رو به هم زده.
حالا می خوام این جداول رو مرتب کنم.
به این شکل که بر اساس تاریخ هست:

2 - 13892 - 2 - رضا - 13890828
1 - 13891 - 1 - سعید - 13890830
3 - 13893 - 3 - علی - 13890901

در جدول Contents:

13892 - مقاله در زمینه ی ژئو فیزیک - Reza@yahoo.com
13891 - مالیات تعلق گرفته - Saeed@yahoo.com
13893 - عنوان 3 - ali@yahoo.com

ولی اگه دقت کنید می بینید که کدها نا مرنب شدن.
در برنامه ی من عملیات فله ای انجام میشه. مثلا از کد 1 تا کد 10 پاک بشن و این برام مهمه.

حالا کد هم به نوعی با تاریخ باید مرتب بشه یعنی به این شکل در هر دو جدول اعمال بشه:

2 - 13891 - 1 - رضا - 13890828
1 - 13892 - 2 - سعید - 13890830
3 - 13893 - 3 - علی - 13890901
(فیلد اول از راست ID هست و اتومات)

جدول Contents

13891 - مقاله در زمینه ی ژئو فیزیک - Reza@yahoo.com
13892 - مالیات تعلق گرفته - Saeed@yahoo.com
13893 - عنوان 3 - ali@yahoo.com

یعنی عنوان هر کاربر باید به خودش برگرده و قاطی نشه. و به نوعی کد کاربر و کد یکتا (سال+کد کاربر) با توجه به ترتیب تاریخ عوض بشه و به ترتیب بشه. هم در جدول اصلی و هم در جدولی که باهاش در ارتباطه.

امیدوارم متوجه شده باشین دوستان.

باز هم ممنون از وقتتون.
منتظر هستم.
یا علی.

حمیدرضاصادقیان
پنج شنبه 27 آبان 1389, 23:55 عصر
سلام.اینو شما با کوئری فکر نکنم بتونید بنویسید. در این حالت شما باید داده های جداول رو مرتب کنید. مگر اینکه این کد 13891,13892,13893 به صورت داینامیک در زمان تهیه گزارش ایجاد بشه که در این حالت شما میتونید این فیلد رو به صورت مرتب نمایش بدید.
ولی الان هر رکورد شما یک id خاص گرفته و براساس هرکدوم Sort کنید به نتیجه دلخواه نمیرسید. یک راه این هست که به صورت داینامیک این فیلد رو نمایش بدید یک راه این هست که بایک تابع مقادیر اونو مرتب کنید.
از چه نسخه ای استفاده می کنید؟؟

netfa.ir
جمعه 28 آبان 1389, 01:27 صبح
سلام.اینو شما با کوئری فکر نکنم بتونید بنویسید. در این حالت شما باید داده های جداول رو مرتب کنید. مگر اینکه این کد 13891,13892,13893 به صورت داینامیک در زمان تهیه گزارش ایجاد بشه که در این حالت شما میتونید این فیلد رو به صورت مرتب نمایش بدید.
ولی الان هر رکورد شما یک id خاص گرفته و براساس هرکدوم Sort کنید به نتیجه دلخواه نمیرسید. یک راه این هست که به صورت داینامیک این فیلد رو نمایش بدید یک راه این هست که بایک تابع مقادیر اونو مرتب کنید.
از چه نسخه ای استفاده می کنید؟؟

ممنون از پاسختون.
من از 2008 استفاده می کنم R2...

من تونستم با استفاده از ROW_NUMBER() ترتیب رو برای جدول Names اعمال کنم.
ولی حالا یه مشکل می مونه و اون هم این هست که برای مرتب کردن Code ( که کلید اصلی و برای من کد یکتا هست) به مشکل می خورم.
ببینید.
من از این طریق جدول Names رو آپدیت کردم (یه کوئری فوقل العاده پیچیده که پدر من رو دراورد :قهقهه: )



UPDATE Names
SET Names.C= Names.New_C
FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY Date ASC) AS New_C
FROM Names) AS Names;


حالا این کد C مرتب میشه بر اساس تاریخ. ولی می خوام اون کد یکتا هم مرتب بشه (Code)
برای این کار می خوام یه فیلد به اسم Year هم اضافه کنم و بعد فیلد Year و با C جمع کنم و کد یکتای جدیدم رو Update کنم...
ولی...
در این صورت چون Code کلید اصلی هست و در جدول Contents با نام CodeREF هم موجوده نمی تونم این رو آپدیت کنم.
ایده ای به ذهنتون میرسه دوستان؟؟؟
واقعا دیگه مخم سوت کشیده تا اینجا اومدم جلو :چشمک:
ببینم می تونین کمک به این دادش کوچیکتون کنید که بدجوری گیره.
اجرتون با امام علی.
یا علی.