View Full Version : فقط با دستور های ساده
Iman_a13
پنج شنبه 10 دی 1388, 22:04 عصر
سلام دوستان یکی دیگه از پازلهای معروف استاد بنده از این قرار ( انگار استاد ما خیال نداره دست از کل کل برداره):
استادمون میگه یه جدول داریم به اسم tinfo که 3 تا فیلد داره به اسم های
code
fn
ln
حالا می خوایم با یک quary ساده ( حتما باید با دستورات ساده نوشته شود) یک ردیف هم به این فیلدها به صورت مجازی اضافه بشه
مثلا اگر جدول ما هست:
code fn ln
-------------------------------------
علی رضایی 2
رضا حسنی 5
افشین پیشرو 3
.
.
.
با quary که می نویبسیم بشه:
radif code fn ln
--------------------------------------------------
علی رضایی 2 1
رضا حسنی 5 2
افشین پیشرو 3 3
.
.
.
ممنون از همه دوستان باسواد و با حوصله
bahman_akbarzadeh
جمعه 11 دی 1388, 10:44 صبح
خوب بدون دستورات و توابع خاص SQL، يه مقدار سخته.
حالا اين رو امتحان كن ببين چطوره :
Select ( Select Count(*) From tinfo Where code < tmpTable.code ) as radif,
code, fn, ln From tinfo tmpTable Order By code
فكر مي كنم چيزي رو كه ميخواين بده، ولي همين جوري نوشتم، تستش بكنين.
Hamid.Kad
جمعه 11 دی 1388, 11:59 صبح
اگر از 2005 به بعد استفاده میکنید
SELECT ROW_NUMBER() OVER (ORDER BY code)as 'radif',* FROM tinfo
اگر از 2000 استفاده میکنید:
SELECT IDENTITY(INT,1,1)AS radif,* INTO #t1 FROM tinfo
SELECT * FROM #t1
فکر کنم به اندازه کافی هم ساده باشند
محمد سلیم آبادی
جمعه 11 دی 1388, 15:49 عصر
radif code fn ln
--------------------------------------------------
علی رضایی 2 1
رضا حسنی 5 2
افشین پیشرو 3 3
شک دارم سوال درست مطرح شده باشد.
اول از همه باید مشخص بشه که داده های اصلی قرار است بر چه اساسی مرتب شوند. شما می تونین اساس ترتیب سطر های فوق رو حدس بزنین؟ شاید بر اساس نزولی ستون فامیلی باشد.
به هر حال یکی از شیک ترین و شکیل ترین راه حل های استاندارد و سنتی روشی است به نام "non-equal self join" که برای مشاهده ی مثال شما را به پستهای ثباتی ارجاع میدم (http://www.barnamenevis.org/forum/showthread.php?t=11186)
( انگار استاد ما خیال نداره دست از کل کل برداره
فکر می کنم این استادتون وقتی شبا خوابش نمی بره فردا صحبش باید یه جوری حال بچه ها رو بگیره (:
اینا که اسمش پازل نیست اگر می خواهی یک کلاسی برای استادت بزاری کتاب زیر رو بهش معرفی کن یا اصلا خودت یک پازل رو از کتاب در بیار و از استاد بپرس تا طعم تلخ ندونستن و کم آوردن جلوی دانشجو رو بچش.
Joe Celko's SQL Puzzles and Answers (2nd edition, Morgan-Kaufmann 2006) ISBN 978-0-12-373596-6 (http://en.wikipedia.org/wiki/Special:BookSources/9780123735966)
Hamid.Kad
جمعه 11 دی 1388, 17:06 عصر
منظور ايشون، استفاده از توابع و دستورات ساده (معمول) SQL بود.
ساده و معمول بودن یعنی چی ؟
شما میفرمائید Identity ساده هست یا نه؟ هست ؟ من میگم نیست! منظورم اینه که ساده و معمول بودن یه چیز نسبیه. حداقل استاد ایشون باید میگفت که استفاده از چه دستوراتی مجازه
فکر می کنم این استادتون وقتی شبا خوابش نمی بره فردا صحبش باید یه جوری حال بچه ها رو بگیره (:
اینا که اسمش پازل نیست اگر می خواهی یک کلاسی برای استادت بزاری کتاب زیر رو بهش معرفی کن یا اصلا خودت یک پازل رو از کتاب در بیار و از استاد بپرس تا طعم تلخ ندونستن و کم آوردن جلوی دانشجو رو بچش.
مهندس خین خودتو کثیف نکن. بالاخره استاد هم باید یه تمرینی بده به دانشجو و دانشجو بره دنبال دانش! من با این کار موافقم و مطمئناً استاد ایشون هم نمی خواسته دانشجوهاش رو تحقیر کنه.:لبخندساده:
راستی مهندس اون کتاب بالا که گفتی رو داری ؟ من search کردم چیزی پیدا نکردم. اگه داشتی ممنون میشم... (کپی رایت داره ؟)
bahman_akbarzadeh
یک شنبه 13 دی 1388, 10:38 صبح
فهمیدن کوئری، زیاد سخت نیست.
نکته اصلی اینه که سطرها بر اساس کد، مرتب میشن و در Select داخلی که به ازای هر سطر، خروجی میده، میاد تعداد سطرهای قبل از سطر فعلی رو میشمره و تو فیلد radif میزاره.
الان متوجه شدم که اینجوری که نوشتم، ردیف از صفر شروع میشه :لبخند: . برای تصحیح اون، یا میتونید شرط کوچکتر رو به کوچکتر مساوی تبدیل کنید، یا بجای (*)Count بنویسین 1 + (*)Count
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.