PDA

View Full Version : مرتب کردن جدول



khorsandreza
چهارشنبه 04 تیر 1393, 21:24 عصر
سلام دوستان لطفا به تصویر زیر نگاه کنید.
من میخواهم وقتی جدول را مرتب می کنم ستون prnt , pk_id طوری مرتب شود که ردیف 181 یعد از 150 قرار بگیرد .
و یا روشی پیشنهاد کنید بتوانم مرتب کردن را انجام دهم باید بگویم ستون pk_id اندیکس شده است

pezhvakco
پنج شنبه 05 تیر 1393, 08:33 صبح
سلام
اگه درست دیده باشم شما هر دو Select را بر روی یک جدول انجام دادین = ؟

شاید خواسته شما این بوده =


Select pk_id , radif , prnt , codm
From TB_BuySaham
Where codm = '158...'
And vazs in (1 , 0)
Order by pk_id , prnt

khorsandreza
پنج شنبه 05 تیر 1393, 14:26 عصر
سلام
اگه درست دیده باشم شما هر دو Select را بر روی یک جدول انجام دادین = ؟

شاید خواسته شما این بوده =


Select pk_id , radif , prnt , codm
From TB_BuySaham
Where codm = '158...'
And vazs in (1 , 0)
Order by pk_id , prnt


سلام دوست عزیز چندان ئستورات شما با مال من فرقی ندارد من تمام روشهای تست نکردم نشد من میخواستم روش مرتب کردن به شکل زیر باشد
من می خواهم مقدار ستون فرزند prnt بعد از ستون پدر pk_id مرتب شود.
مجبور شدم ستونی ایجاد کنم و با استفاده از یک تریگر موقع ورود اطلاعات ستون مزبور را مقدار دهی کنم تا روش مرتب کردن بر اساس خواسته من باشد

DECLARE @codm nvarchar(10);
select @codm = codm from inserted;
update TB_BuySaham set sort=pk_id where codm = @codm and prnt = 0;
update TB_BuySaham set sort=prnt where codm = @codm and prnt <> 0;

Mahmoud.Afrad
جمعه 06 تیر 1393, 02:32 صبح
روش حل همینه که گفتی منتها بد پیاده کردی. اصلا نیازی به ستون sort نداری و کافیه موقع نیاز در جلوی سلکت یک ستون خودت اضافه کنی و با استفاده case تصمیم بگیری چی توش قرار بگیره ، در آخر هم ستونهای مورد نیازت رو بیرون بکشی با ترتیب همون ستون موقت.

with cte
as
(
select pk_id ,
radif ,
prnt ,
codm ,
tmp = case prnt
when 0 then pk_id
else prnt
end
Where codm = '158...'
from tbl
)
select pk_id , radif , prnt , codm
from cte
order by cte.tmp