View Full Version : دستور top
sare443
جمعه 20 اردیبهشت 1392, 16:43 عصر
سلام دوستان
در دستور زیر with ties چه کار می کند؟
select top n with ties columns.tables
from maste inner join details on pk.master=fk.details
این قسمت که با رنگ قرمز مشخص شده چه کار می کند؟؟
با تشکر
fakhravari
جمعه 20 اردیبهشت 1392, 19:41 عصر
http://www.w3schools.com/sql/sql_top.asp
N_D
شنبه 21 اردیبهشت 1392, 09:24 صبح
این دستور بدون order by بی معنی هست و به تعداد فیلهای order by وابسته هست.
دیتای زیررو در نظر بگیرید اسمامی فیلد ها
name , Pos,val
-----------------------
ali, 2,10
ali,2,15
reza,1,15
reza,1,17
1,19,reza
reza,2,10
reza,2,12
حال کوئری زیر را در نظر بگیرید
ُ
ُSelect top 3 * from Table
order by name,pos
در اینجا دقیقا 3 ردیف اول را بر میگرداند ولی اگر منظور شما این باشد که مقادیری که در فیلهای مرتب شده آمده اند(name,pos) تا انتهای مرتب سازی پیش بروند (reza,1)..
آنگاه شما میتوانید مابقی رکورد هایی که شامل reza,1 هستند را نیز درخواست کنید(با استفاده از with ties).
پس بااین اوصاف تعداد رکورد های برگردانده شده برابر است با 5 . جائیکه رکورد های متناظر با reza,1 به اتمام میرسد.
یوسف زالی
شنبه 21 اردیبهشت 1392, 09:53 صبح
این دستور بدون order by بی معنی هست
به نظر من حرف شما بی معنی است.
این کاملا بستگی به نحوه ی استفاده از این راهنما داره.
مثال:
if exists(select top 1 1 from Tbl where blabla) DoSomething
N_D
شنبه 21 اردیبهشت 1392, 11:42 صبح
جناب You-See اول موضوع رو درک کن بعدا جواب تند بده ..
یه نظر به سوالی که دوستمون کرده بنداز میبینی که with ties رو برنگ قرمز نوشته که کسانی که میخوان جواب بدن نظرشون جلب بشه، پس خواننده باید طبق خواسته sare443 جواب بده نه نظر کلی در مورد TOP.
وقتی with ties رو بدن order by بکار ببری پیغام Msg 1062, Level 15, State 1, Line 2
The TOP N WITH TIES clause is not allowed without a corresponding ORDER BY clause.
ظاهر میشه.
باز هم میگم اول پست ها رو خوب بخون بعد از درک صحیح یه جواب بده که به دیگران توهین نشه.
Reza_Yarahmadi
شنبه 21 اردیبهشت 1392, 11:52 صبح
دوست عزیز N_D (http://barnamenevis.org/member.php?3915-N_D) داده های نمونه ای که گذاشتید فکر کنم اشتباه شده؛ همه reza ها باید مقدار pos = 1 داشته باشند تا با توضیحشون هم خونی داشت باشه ( و یا دستور Order BY Name,Pos به Order BY Name تغییر کنه)
یوسف زالی
شنبه 21 اردیبهشت 1392, 12:14 عصر
اول موضوع رو درک کن بعدا جواب تند بده
جواب من تند بود؟!!
این که گفتید خوب نخوندم اشتباه کردید.
اما با توجه به پاسخ دوست اولمون، "به اشتباه" پاسخ شما رو هم مبنی بر کلی گرایی در مورد این دستور کردم.
در هر حال هیچ غرضی در کار نیست، هیچ مساله ای هم شخصی نیست.
اگر شما این رو توهین می دونید اشتباه کردید. این که پست من بی ربط باشه یا پست شما بی ربط باشه در قالب کارکرد و ذات علمی سایت، اصلا توهین نیست و کاملا در فضای حرفه ای هست.
لطفا ناراحت نشوید و از من هم به دل نگیرید.
بنده در برداشت خودم اشتباه کردم و می پذیرم.
برای مفید شدن این پست هم:
شما با اون کلمه به سلکت می گید که فیلد هایی که در Order By اومدند رو مرجع قرار بده. در این حالت تعداد ردیف های برگشت داده شده برابر است با کران بالای تعدادی که در خواست کردید البته با درنظر گرفتن تعداد واقعی اونها در جدول و در نظر گرفتن تکراری ها.
با گذاشتن کلمه ی Distinct می تونید رفتار اون رو عوض کنید.
N_D
شنبه 21 اردیبهشت 1392, 12:24 عصر
دوست عزیز داده ها را با دقت انتخاب شده اند تا مطلب رو کامل در بر بگیرند
Create table #T(name varchar(10),pos int, val int)
Insert into #T values('ali', 2,10)
Insert into #T values('ali', 2,15)
Insert into #T values('reza', 1,15)
Insert into #T values('reza', 1,17)
Insert into #T values('reza', 1,19)
Insert into #T values('reza', 2,10)
Insert into #T values('reza', 2,12)
-- حالت عادی
Select top 3 * from #T
-- با with ties
Select top 3 with ties * from #T
order by name,pos
Drop table #T
لینک مایکروسافت
http://msdn.microsoft.com/en-us/library/ms189463.aspx
WITH TIES
Used when you want to return two or more rows that tie for last place in the limited results set. Must be used with the ORDER BY clause. WITH TIES may cause more rows to be returned than the value specified in expression. For example, if expression is set to 5 but 2 additional rows match the values of the ORDER BY columns in row 5, the result set will contain 7 rows.
TOP...WITH TIES can be specified only in SELECT statements, and only if an ORDER BY clause is specified. The returned order of tying records is arbitrary. ORDER BY does not affect this rule.
N_D
شنبه 21 اردیبهشت 1392, 12:43 عصر
distinct در این مورد خاص جوابگو نیست
Reza_Yarahmadi
شنبه 21 اردیبهشت 1392, 14:27 عصر
دوست عزیز داده ها را با دقت انتخاب شده اند تا مطلب رو کامل در بر بگیرند
حق با شماست حواسم به داده های ali نبود.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.