PDA

View Full Version : دستور ٍSelect



SADAF
دوشنبه 21 آذر 1384, 14:02 عصر
سلام دوستان
دستور Select یی دارم به این صورت
Select * From tablename where Id in (1,6,3,5)
که بخش (1,6,3,5) متغیر است . من می خواهم رکرودهایی که بر می گردند مرتب شده بر اساس همین رشته متغیرم باشد . یعنی ابتدا رکوردی که Id آن 1 است بیاید سپس رکوردی که Id آن 6 است و سپس Id=3 و سپس Id=5
آیا می توانم این مجموعه اعداد را در بخش Order By بگذارم ؟؟؟

سید مسعود موحد
دوشنبه 21 آذر 1384, 15:07 عصر
نه نمیتوانی بجای ان میتوانی از 4 تا UNION‌استفاده نمایی که به هر صورتی که دوست داری UNION‌های خود را بچینی

m_ziba
سه شنبه 22 آذر 1384, 00:18 صبح
Select * From tablename where Id in (1,6,3,5) order by Id

سید مسعود موحد
سه شنبه 22 آذر 1384, 07:57 صبح
دوست عزیز M_Ziba دوستمون SADAF‌ میخواهد که خروجیش به شکل زیر باشد دقت کنید





ID
1
1
1
6
6
3
3
3
5



برای اینکار هم باید بشکلی که در دو پست قبلی گفتم بنویسد






SELECT * From Table WHERE ID = 1
UNION
SELECT * From Table WHERE ID = 6
UNION
SELECT * From Table WHERE ID = 3
UNION
SELECT * From Table WHERE ID = 5

SADAF
چهارشنبه 23 آذر 1384, 11:49 صبح
سلام
اگر ID کلید جدول باشد Union هم چاره ساز نیست و همچنان به ترتیب ID اطلاعات را بر می گرداند

سید مسعود موحد
چهارشنبه 23 آذر 1384, 12:47 عصر
دوست عزیز
من معذرت میخوام در پست فبلیم که الان دیدم باید WHERE میگذاشتم نه ORDER BY تصحیح گردید

Kamyar.Kimiyabeigi
چهارشنبه 23 آذر 1384, 14:30 عصر
نه نمیتوانی بجای ان میتوانی از 4 تا UNION‌استفاده نمایی که به هر صورتی که دوست داری UNION‌های خود را بچینی
جناب آقای موحد جواب شما احتمالا" اشتباه است ...... (اگر تعداد متغیرها 8 تا بود باید 8 تا union بزنیم ؟؟؟) اصلا" اگه تعداد متغیرها مشخص نبود چی؟؟؟؟
من فکر میکنم که جواب دوست عزیزمون m_ziba درست باشه
موفق باشین

سید مسعود موحد
چهارشنبه 23 آذر 1384, 14:37 عصر
Select * From tablename where Id in (1,6,3,5) order by Id

درسته راه من این مشکل را دارد ولی کد فوق وقتی که ORder By روی ID ‌زده خروجی مرتب شده میباشد یعنی اول 1 بعد 6 و بعد 3 نمی آید بلکه اول 1 بعد 3 بعد 65 و بعد 6 می آید حال انکه دوستمون بشکل اول 1 بعد6 یعد 3 بعد 5 میخواهد

SADAF
پنج شنبه 24 آذر 1384, 14:23 عصر
یعنی هیچ راهی نیست ؟...

Omid Rekabsaz
پنج شنبه 24 آذر 1384, 20:50 عصر
مطئنا راه حل وجود دارد... فقط شما لطف کنید یک کمی بیشتر منطق کارتان را توضیح دهید...
اصلا چرا به چنین Query نیاز دارید؟!

SADAF
شنبه 26 آذر 1384, 10:40 صبح
فرض کنید کاربر دنباله ای از کدها را وارد کرده است و می خواهد اطلاعات جدول را مرتب شده بر اساس همان کدها دریافت کند . ( که کدها در حقیقت مقدار یکی از فیلدهای جدول است )

AminSobati
شنبه 26 آذر 1384, 22:19 عصر
دوست عزیزم،
این کار بسیار سادست و فقط کافیه شما یک ستون جدید ایجاد کنین و بر اساس اون Sort انجام بدین. من مثالش رو برای دیتابیس Northwind نوشتم، شما براحتی میتونین روی Query مورد نظرتون اعمال کنید:


USE Northwind
GO

CREATE PROC usp_SortMe
@P1 INT,
@P2 INT,
@P3 INT,
@P4 INT
AS
SELECT CASE
WHEN OrderID=@P1 THEN 1
WHEN OrderID=@P2 THEN 2
WHEN OrderID=@P3 THEN 3
ELSE 4 END AS Rank
,*
FROM [order details]
WHERE OrderID IN (@P1,@P2,@P3,@P4) ORDER BY Rank
GO

EXEC usp_SortMe 10251,10249,10248,10252

SADAF
یک شنبه 27 آذر 1384, 10:45 صبح
هر چند که دنباله کدها نامحدود است ولی راه خوبی رو پیشنهاد کردید . ممنون .