ورود

View Full Version : کمک در حل مشکل یک کوئری؟



majid325
دوشنبه 21 اسفند 1385, 12:13 عصر
با سلام :
دوستان من با این کوئری

SELECT DISTINCT NumID, Question, Ans1, Ans2, Ans3, Ans4, Correct, Level_q, Section, Checked, checkTest, Learning, Kind
FROM
(SELECT TOP (@cuont) NumID, Question, Ans1, Ans2, Ans3, Ans4, Correct, Level_q, Section, Checked, checkTest, Learning, Kind
FROM Tb_Master
WHERE (Kind = @Kind) AND (Learning = @Learning) AND (Section = @section)
ORDER BY NEWID()) AS Tb_Master


به تعداد n تا (@cuont) رکورد از جدولم به صورت تصادفی و حالت DISTINCT بیرون میکشم.
خیلی هم خوب کار میکنه ولی مشکلی که داره اینه که اول n تا (@cuont) رکورد به صورت تصادفی از جدول انتخاب میکنه و بعد حالت DISTINCT رو اجرا میکنه و سوء تفاهم اینجا پیش میاد!
که در حالت انتخاب n تا رکورد از جدولم به صورت تصادفی ممکن چند رکورد تکراری باشند و بعد حالت DISTINCT رو که اجرا میکنه ممکنه خروجی کمتر از (@cuont) باشه!!!!!!!!!!!!!!!!!!!!!!!1

با تشکر

whitehat
دوشنبه 21 اسفند 1385, 12:28 عصر
کار Distinct همینه ! تمام رکورد های تکراری را حذف می کند. اگر می خواهید دقیقا n رکورد داشته باشید و هیچکدام تکراری نباشد جای Distinct و Top را عوض کنید.

majid325
سه شنبه 22 اسفند 1385, 10:51 صبح
کار Distinct همینه ! تمام رکورد های تکراری را حذف می کند. اگر می خواهید دقیقا n رکورد داشته باشید و هیچکدام تکراری نباشد جای Distinct و Top را عوض کنید.
دوست عزیز من میدونم distinct چی کار میکنه.
ولی وقتی جای distinct و top رو عوض میکنم error میگیره!!!
من بعد از کلی بالا و پایین کردن این کوئری رو به دست اوردم .
حالا متوجه این قضیه هم شدم که وقتی کوئری :

SELECT DISTINCT NumID, Question, Ans1, Ans2, Ans3, Ans4, Correct, Level_q, Section, Checked, checkTest, Learning, Kind
FROM Tb_Master
WHERE (Kind = @Kind) AND (Learning = @Learning) AND (Section = @section)

رو اجرا میکنم 3 رکورد بر میگردونه!
ولی وقتی کوئری :

SELECT NumID, Question, Ans1, Ans2, Ans3, Ans4, Correct, Level_q, Section, Checked, checkTest, Learning, Kind
FROM Tb_Master
WHERE (Kind = @Kind) AND (Learning = @Learning) AND (Section = @section)


اجرا میکنم 9 رکورد بر میگردونه ! و این در حالی است که رکورد های بانک من هیچ کدوم تکراری
نیست؟

whitehat
سه شنبه 22 اسفند 1385, 11:42 صبح
ولی وقتی جای distinct و top رو عوض میکنم error میگیره!!!
چه پیغامی دریافت می کنید، و چه Errorی می گیرید؟

و این در حالی است که رکورد های بانک من هیچ کدوم تکراری
مهم این نیست که رکورد های بانک شما تکراری باشند یا خیر. مهم اینه که ستون هایی که در کوئری شما نوشته می شود رکورد تکراری ندهند ( البته این را کلی گفتم ).

majid325
سه شنبه 22 اسفند 1385, 22:06 عصر
چه پیغامی دریافت می کنید، و چه Errorی می گیرید؟
.
الان دقیقا نمیتونم تست کنم ولی یادمه یه بار به کلمه order by گیر میداد .