جلسه چهارم

 ... , Declare | IF | While | Try Catch |  Select | Distinct | Alias | Like

نظرات 3 + ارسال نظر
علی سه‌شنبه 31 مرداد 1391 ساعت 09:39 ب.ظ

سلام
یه سوال به ظاهر ساده SQL ازتون دارم که حسابی اذیتم کرده
اینقد ظاهر سوال راحته که روم نمیشد از کسی بپرسم

من یه تیبل بعنوان جدول لیگ برتر دارم که 18 رکورد داره ( به تعداد تیم های لیگ برتر )
هر کاری کردم و هر چقد فکر کردم نتونستم فیلدی توش ایجاد کنم که بعد از آپدیت و سورت شدن با یه دستوری بشه توش اعداد 1 تا 18 را بترتیب آورد.( برای رتبه هر تیم )
با تابع Row_Number هم نتونستم اینکار کنم چون قرار این فیلد بعد آپدیت شدن و سورت شدن کامل جدول، آپدیت شه. لذا باید هر فیلد رو جدا گونه و با یک مشخصه ( مثه کلید اصلی ) آپدیت کرد ولی تابع مذکور یک عدد نمیده بلکه مجموعه اعداد ( تیبل ) بر میگردونه
با چندین و چند روش دیگم امتحان کردم ولی نتیجه نداد
باور بفرمئید به این سادگی ها نیستش. ظاهرش سادست ولی باطنش سخته
لطفا کمکم کنید تا این مساله رو حل کنم
مرسی

یکم بیشتر توضیح بده !! متوجه نشدم چی میخوای ؟

علی چهارشنبه 1 شهریور 1391 ساعت 11:20 ب.ظ

سلام مجدد
خیلی سادش رو بگم
فرض کنید میخوام برای جدول رده بندیم ردیف داشته باشم
حتما هم میخوام این ردیف تو خود دیتا بیس باشه تا بدونم هر تیم چندم جدوله و ازش این اطلاعات استفاده کنم. دقت کنید این شماره ها باید بعد از آپدیت کامل جدول ایجاد شن و ضمنا تو این جدول اینسرت صورت نمیگیره بلکه اطلاعات فقط آپدیت و سپس با تعریف خاصی که تنظیم شده سورت میشه.
اینکارو نمیشه با تابع Row_Number انجام داد چون اون میاد دیتا رو بصورت تیبل میفرسته نه اسکالر برای هیمن نمیشه بعنوان آپدیت یه فیلد ازش استفاده کرد
برای مثال سعی کنید یه جدول بسازید با 3 تا فیلد که توش یک فیلد مختص به ردیف دومی مثلا مختص به اسم کارکنان شرکت (بعنوان کلید اصلی ) و سومی ساعت کاریشون تو هفته جاریه باشه. هر روز ابتدا این ساعت آ÷دیت میشه و بعد جدول سورت میشه ( بر حسب ساعت کار بصورت کاهشی ) بعد تو قسمت ردیف باید اعداد از 1تا آخر ردیف شن. خب چطوری اینکارو بکنیم؟

** برنامم ( انالیزور آماری لیگ برتر ) گیر این موضوعه. میخوام بمناسبت برد استقلال تو دربی نسخه اولش رو منتشر کنم

علی جمعه 3 شهریور 1391 ساعت 01:58 ق.ظ

سلام
حلش کردم!
اومدم اینکار کردم که موقع آپدیت جدول به قسمت رتبه عدد 19 دادم
یعنی رتبه همه تیم ها 19 باشه ( عددیکه ممکن نیست رتبه هیچ تمی باشه )
بعد از آپدیت کامل جدول و سورتش اونوقت اومدم یه حلقه تشکیل دادم و گفتم اولین رکورد جدول که رتبش برابر 19 است را عدد حلقه رو بده. عدد حلقه هم از 1 شروع میشه تا 18
کدش به این صورته

declare @i tinyint
set @i = 1
while @i < 19
begin
update tbJadval
set Rotbe = @i
where NameOfTeams = (select top 1 NameOfTeams from tbJadval where Rotbe = 19)
set @i = @i + 1
end

همونطورکه می بینید کدش خیلی سادست و شاید تعجب کنید که چرا به فکرم نمیرسیده. علتش اینه که روندی که برای تشکیل و آپدیت جدول ایجاد کرده بودم اجازه اینکارو نمیداد و با تغییر اون این کد دیگه جواب میده
شاید باور نکنید ولی تو این فکر بودم که ببینم با cursor میتونم حلش کنم یا نه!!!
بهر حال ممون که مشکلم رو خوندید
همچنان اگر توصیه یا راه بهتری به ذهنتون میرسه خوشحال میشوم بشنومش

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد