PDA

View Full Version : نحوه مرتب کردن داخل sql



majidsoft
دوشنبه 09 شهریور 1388, 15:51 عصر
با سلام خدمت دوستان
من یک پایگاه داده sql2005 دارم و اطلاعات را در یک table ذخیره می کند حالا می خواهم اطلاعات هنگام ورود ابتدا بر اساس فیلد دوره sort شود و سپس رکوردهای مرتب شده بر اساس فیلد دوره در داخل خودشان نیز بر اساس فیلد روز مرتب شود یعنی مثلا ما 4 رکورد داریم که دارای فیلد دوره 1 می باشد که در ابتدای table قرار می گیرد سپس خود این چها رکورد نیز بر اساس فیلد روز مرتب شوند
با تشکر

arman_Nasrollahi
دوشنبه 09 شهریور 1388, 18:00 عصر
من فکر می کنم می تونی بر اساس دو تا فیلد order by کنی!!
اگر مورد دیگری می خوایی بیشتر توضیح بده !!!

بهنام بهمنی
سه شنبه 10 شهریور 1388, 11:31 صبح
کدي شبيه کد زير ینوسيد و در order by فيلدهايي که مي خواهيذ بر اساس آن مرتب شود به ترتيب بنوسيد

select * from tbl1 order by dore,roz

محمد سلیم آبادی
سه شنبه 10 شهریور 1388, 12:04 عصر
SELECT * FROM table_1
ORDER BY col1 ASC,
col2 ASC

majidsoft
سه شنبه 10 شهریور 1388, 19:20 عصر
با تشکر از دوستان می خواستم بدانم این کدهایی که شم داده اید قبل از ورود اطلاعات باید بدهم یعنی هر بار برای اضافه کردن اطلاعات از این کد استفاده کنم
با تشکر

محمد سلیم آبادی
سه شنبه 10 شهریور 1388, 20:35 عصر
برای ورود اطلاعات شما نیازی نیست جایگاه سطر را در جدول برای درج مشخص کنید (در واقع جایگاه سطر در جدول بر اساس شاخص ها می باشد)

هرگاه خواستید اطلاعات را از جدول به نمایش در آورید کافی است که آنها را بر اساس قانون خود sort کنید

احمد سامعی
جمعه 13 شهریور 1388, 13:13 عصر
سلام
تو مستندات sql نوشته بعد اضافه كردن ركورد مي ره آخرين سطر قرار مي گيره. با چه دستوري مي شه براي يك بار جدول نزولي sort كرد ؟
من مي خوام وقتي select مي كنم به ترتيب نزولي برا اساس يك ستون نمايش داده بشه ؟ آيا بايد هر بار كه مي خوام select كنم از order by استفاده كنم يا راه ديگ هاي هم داره ؟
مثلاً در Access يك بار روي ستون كليك مي كني و تعيين مي كني صعودي يا نزولي باشه و بعد از اضافه يا آپديت كردن هر ركورد خودش sort مي كنه

محمد سلیم آبادی
جمعه 13 شهریور 1388, 13:49 عصر
سلام
تو مستندات sql نوشته بعد اضافه كردن ركورد مي ره آخرين سطر قرار مي گيره. با چه دستوري مي شه براي يك بار جدول نزولي sort كرد ؟
من مي خوام وقتي select مي كنم به ترتيب نزولي برا اساس يك ستون نمايش داده بشه ؟ آيا بايد هر بار كه مي خوام select كنم از order by استفاده كنم يا راه ديگ هاي هم داره ؟
مثلاً در Access يك بار روي ستون كليك مي كني و تعيين مي كني صعودي يا نزولي باشه و بعد از اضافه يا آپديت كردن هر ركورد خودش sort مي كنه


با سلام خدمت دوستان
من یک پایگاه داده sql2005 دارم و اطلاعات را در یک table ذخیره می کند حالا می خواهم اطلاعات هنگام ورود ابتدا بر اساس فیلد دوره sort شود و سپس رکوردهای مرتب شده بر اساس فیلد دوره در داخل خودشان نیز بر اساس فیلد روز مرتب شود یعنی مثلا ما 4 رکورد داریم که دارای فیلد دوره 1 می باشد که در ابتدای table قرار می گیرد سپس خود این چها رکورد نیز بر اساس فیلد روز مرتب شوند
با تشکر

یک راه وجود دارد، استفاده از unique key. برای این منظور هم می توانید از طراحی جدول استفاده کنید و هم از T-SQL، در اینجا یک مثال برایتان آورده ام.
ستون اول کلید جدول است، حالا ما میخواهیم جدول ما بدون استفاده از order by بطور اتوماتیک بر اساس ستون دوم به طور صعودی مرتب شود!
به خطی که به رنگ نارجی در آمده است توجه کنید، ترتیب نوشتن ستون ها و asc یا desc مهم هستند!!!



declare @a table
(
col1 int primary key,
col2 char,
unique(col2 asc, col1 asc)
)

insert @a
select 1, 'c' union all
select 2, 'd' union all
select 3, 'a' union all
select 4, 'a'

select * from @a --Order by Automatic!!
--Wittout ORDER BY!


--First Order by col2 asc then Order by col1 asc!
/*-- OUTPUT/RESULT
col1 col2
----------- ----
3 a
4 a
1 c
2 d
*/
---------------

احمد سامعی
جمعه 13 شهریور 1388, 20:03 عصر
یک راه وجود دارد، استفاده از unique key. ]

منون اما دو نكته:
1. جدول من كليد نداره
2. ديتابيس من رو هاست در حال استفاده من است
با برنامه SQL Server Management Studio Express مي خوام يك كوئري اجرا كنم تا ركوردهاي موجود sort را كنم و ديگه بهش كاري نداشته باشم (من از كد شما سر درنياوردم!)
يا اگه راه حل ديگه اي داره ممنون مي شم........:قلب:

محمد سلیم آبادی
جمعه 13 شهریور 1388, 21:50 عصر
منون اما دو نكته:
1. جدول من كليد نداره
2. ديتابيس من رو هاست در حال استفاده من است
با برنامه SQL Server Management Studio Express مي خوام يك كوئري اجرا كنم تا ركوردهاي موجود sort را كنم و ديگه بهش كاري نداشته باشم (من از كد شما سر درنياوردم!)
يا اگه راه حل ديگه اي داره ممنون مي شم........:قلب:

در همان بخشی که جدول خود را طراحی/ساخت اید بروید روی یکی از ستون ها راست کلیک کنید سپس در لیست، گزینه Index/key را انتخاب کنید در پنجره ظاهر شده روی دکمه Add کلیک کنید سپس نوع آن را Unique انتخاب کرده و در قسمت column روی دکمه ... کلیک کرده و تنظیمات مورد نظر خود را انجام دهید، دقت کنید که تمام ستون های جدول را باید به لیست مربوط به unique اضافه کنید.

راه دیگری را نمی دانم

majidsoft
شنبه 14 شهریور 1388, 00:24 صبح
با سلام و تشکر این روش شما اجازه اضافه کردن عدد را به آن ستون نمی دهد من می خواهم عدد که اضافه شد خودکار sort شود و در جای خودش قرار گیرد
با تشکر

محمد سلیم آبادی
شنبه 14 شهریور 1388, 01:09 صبح
به کدام ستون؟ اگر منظورتان مثال ایست که آوردم، مقادیر col1 نباید تکراری باشند و همچنین ترکیب مقادیر col1 و col2 نیز نباید تکراری باشند.

احمد سامعی
شنبه 14 شهریور 1388, 10:07 صبح
در پنجره ظاهر شده روی دکمه Add کلیک کنید سپس نوع آن را Unique انتخاب کرده و در قسمت column روی دکمه ... کلیک کرده و

باز هم ممنون دوست عزيز
من برنامه SEM كه باز كردم تو ديتابيس مربوط يك قسمت داشت به نام Indexes و توش New Index كه زدم يك ويزارد باز شد يك گذينه داشت به نام Index Type با سه گذينه clustered, Nonclustered, Primary XML تفاوت اين ها چيه ؟

در ضمن من طبق راهنمايي شما تيك unique زدم و تمام فيلدهاي جدول اضافه كردم ولي يك فيلد داشت از نوع ( NVarChar(MAX وقتي ok كردم ارور مي داد كه اين type ناشناس و من اين فيلد حذف كردم.آيا مشكلي پيش مي ياره ؟( البته اونجايي كه من اين جدول با GridView نمايش مي دم فقط همين فيلد توش نيست )