PDA

View Full Version : سوال: select با خروجی خاص



lord_viper
دوشنبه 17 خرداد 1389, 15:54 عصر
با سلام

عنوانی بهتر به ذهنم نرسید
من میخواهم یک select به یک جدول(فیلدی از نوع عددی) بزنم و نیاز دارم در خروجی حتما یک سری از اعداد وجود داشته باشد در صورتی که این اعداد در جدول وجود ندارد
چطور باید این سلکت را پیاده سازی کرد؟
با تشکر

AminSobati
دوشنبه 17 خرداد 1389, 16:57 عصر
سلام دوست عزیزم،
لطفا یک نمونه از خروجی مورد نظرتون رو پست بفرمایید

lord_viper
دوشنبه 17 خرداد 1389, 18:37 عصر
مثلا این فیلد عددی دارای 5 ردیف با مقادیر 5-6-10-15-17 هست وقتی سلکت میزنم میخواهم خروجی هر چی بود مثلا اعداد 20-23-14-2 هم علاوه بر اعداد بالا نمایش داده بشه مثلا به این شکل بشه

2-5-6-10-14-15-17-20-23-

ممنون از وقتی که میزارید

محمد سلیم آبادی
دوشنبه 17 خرداد 1389, 18:54 عصر
مثلا این فیلد عددی دارای 5 ردیف با مقادیر 5-6-10-15-17 هست وقتی سلکت میزنم میخواهم خروجی هر چی بود مثلا اعداد 20-23-14-2 هم علاوه بر اعداد بالا نمایش داده بشه مثلا به این شکل بشه

2-5-6-10-14-15-17-20-23-

ممنون از وقتی که میزارید

سری اعداد دوم از کجا، برچه اساسی، از چه منطقی بدست آمدند؟ آیا در جدول دیگری ذخیره شده اند؟
این اعداد (سری دوم) در چه range ای قرار دارند؟ تعداد این اعداد چقدر است؟ تصادفی هستند؟
برای چی به همچین نتیجه ای احتیاج دارین؟

lord_viper
دوشنبه 17 خرداد 1389, 23:42 عصر
اعداد سری دوم اعدادی هستند که در هیچ جدولی وجود ندارند ولی رزرو شده هستند(در هر سری تعداد کمی حداکثر 5-10 عدد به صورت راندوم) برای اینکه برنامه اشتباها ان اعداد را پیشنهاد نده میخواهم همراه خروجی سلکت قرار شون بدهم تا باعث پردازش اضافی روی برنامه اصلی نشه

محمد سلیم آبادی
سه شنبه 18 خرداد 1389, 00:07 صبح
ببینید من درست متوجه نیازتون شدم یا نه.
شما علاوه بر سطرهای موجود در جدول نیاز دارین حد اکثر 10 عدد تصادفی به داده های جدول مورد نظر اضافه بشند.
پس اینو امتحان کنید:

DECLARE @r int; SELECT @r = ABS(CHECKSUM(NEWID()))%10 +1;
(SELECT TOP (@r) ABS(CHECKSUM(NEWID()))%100 i FROM sys.columns )
UNION ALL SELECT i FROM table_name

lord_viper
سه شنبه 18 خرداد 1389, 09:15 صبح
ممنون جناب سلیم ابادی
منظورم از رندوم اینه که معمولا اعداد متفاوت از سری قبل هستن
تو برنامه کاربر چند رکورد رو (5تا10)رو با هم وارد میکنه برای هر رکورد برنامه باید یک عدد پیشنهاد بده(مقداری که تو بانک نباشه)و به یکی از رکوردهای قبلی هم اختصاص داده نشده باشه(برای رکوردهای قبل خودش رزرو نشده باشه)برای جلوگیری از پردازشهای اضافی میخواهم اون اعدادی که رزرو میشن رو هم درون سلکت قرار بدم تا با عملیات کمتر روی داده ها عدد مناسب بعدی رو پیدا کنم

با تشکر

محمد سلیم آبادی
سه شنبه 18 خرداد 1389, 10:39 صبح
زمانی می تونم یک کوئری کامل و دقیق ارائه بدم که شما جزئیات را دقیق مطرح کرده باشین. در صورتی که به سوال قبلیم که این اعداد در چه رنجی هستند، آیا اعشاری هستند، مثبت هستند و ... . جواب داده نشد
باید اینها مشخص بشه.
دیگه نیازی به دلیل اینکه چرا اینکار را می خواهید انجام بدین وجود نداره.

من تصور می کنم شما یک جدول دارین که کاربر مثلا 5 الی 10 عدد را به شکل سطر در آن درج میکنه سپس می خواهین به همین تعداد اعداد تصادفی تولید کنید و با سطرهای قبلی اجتماع کنید با این نکته که نباید این عداد تصادفی با اعدادی که کاربر پیشنهاد داده برابر و تکراری باشه. با این توضیحات همان کدپست قبلی با کمی تغییر داریم:

DECLARE @r int; SELECT @r = COUNT(*) FROM table_name;
(SELECT TOP (@r) i
FROM (SELECT ABS(CHECKSUM(NEWID()))%100 i FROM sys.columns)D(i)
WHERE i NOT IN (SELECT i FROM table_name)
)
UNION ALL
SELECT i FROM table_name
در اینجا table_name نام جدول مورد نظر است.

lord_viper
سه شنبه 18 خرداد 1389, 11:30 صبح
با تشکر
فیلد عددی از نوع int هست که بازش تو همین رنج میشه-عدد صحیح و مثبت هست
این جدول یک فیلد عددی داره که عدد تکراری درش وجود نداره کاربر ممکنه کدها رو به ترتیب زده باشه یا بدون ترتیب در هر حالت وقتی کاربر میخواهد اطلاعات جدید رو اماده کنه برای هر رکورد باید یک عدد(اولین عدد خالی موجود)را پیشنهاد بده(اطلاعات هنوز وارد بانک نشده)برای رکورد بعدی باید عدد دیگه ای رو پیشنهاد بده چون عدد اولی برای رکورد قبلی رزرو شده