PDA

View Full Version : مشکل در انجام دستور Select خاص



mohammad.es24
چهارشنبه 05 بهمن 1390, 16:45 عصر
سلام به همه دوستان.
من یه تیبل دارم که یک سری اطلاعات مربوط به کالا داخلش هست.حالا میخوم ازین تیبل سلکت کنم.داخل این تیبل که اطلاعات کالا هست حالا هر ردیف یک شماره سند دارهویک محل داره یک وضعیت سند.حالا ایم وضعیت سند باطل هست و قطعی.
به عنوان مثال
نام کالا =x شماره سند=1 محل =y وضعیت =قطعی
نام کالا =x شماره سند=1محل =y وضعیت =باطل
یعنی همه چیزشون یکیه ولی وضعیت سندشون باهم فرق میکنه
حالا من میخوام سلکت کنم و شرطش این باشه که اگه از یک شماره سند هم قطعی بود هم باطل بیا امنی مه قطعی هست رو نشون بده .حالا زمانی هم که اون سند فقط قطعی هست یا فقط باطل هم نمایش بده.مشکل من اینه که وقتی هم قطعی شده هم باطل که میخوام باطل رو نشون نده.ممنون میشم کمکم کنید

maktoom
چهارشنبه 05 بهمن 1390, 19:05 عصر
سلام
با توجه به اطلاعاتی که در اختیار گذاشتید فقط میشه گفت از قرار دادن قیود and و or در شرط where می تونید به مطلوبتون برسید.

Galawij
چهارشنبه 05 بهمن 1390, 19:59 عصر
حالا من میخوام سلکت کنم و شرطش این باشه که اگه از یک شماره سند هم قطعی بود هم باطل بیا امنی مه قطعی هست رو نشون بده .حالا زمانی هم که اون سند فقط قطعی هست یا فقط باطل هم نمایش بده.مشکل من اینه که وقتی هم قطعی شده هم باطل که میخوام باطل رو نشون نده.ممنون میشم کمکم کنید سلام،
سوال جالبی مطرح کردید، به این راه حل دقت کنید:
Declare @KodKala int
Set @KodKala=100
;with Result AS
(Select id,Case When TB.statuse like '%قطعی%' Then 1
When TB.statuse like '%باطل%' Then 2
Else 0 End AS statuse
From dbo.Table_1 as tb
Where KodKala=@KodKala
)
Select * From Result --Where statuse=2
شما حتماً با یک کد و یا کالای خاصی می خواید جستجو کنید، برای این کار من یک متغیر تعریف کردم که می تونید به عنوان پارامتر هم پاس بدید. اگر وضعیت آن کالا فقط قطعی باشد با شماره 1، اگر فقط باطل با شماره 2 و اگر هر دو باشد که هم 1 و هم 2 را برمی گرداند(در غیر این صورت صفر)، که شما می تونید با یک Select روی آن نتیجه مد نظرتون را نمایش بدید.

mohammad.es24
پنج شنبه 06 بهمن 1390, 09:18 صبح
ممنون از کمکت دوست عزیز.اطلاعات مفیدی بود برام.ولی باز الان من همون مشکل رو دارم.شاید من سوالمو خوب مطرح نکردم.من میخوام زمانی که در یک محل مثلا فروشگاه 1 از یک سند با شماره 10 هم باطلش هست هم قطعیش بیاد فقط قطعی رو نشون بده در غیر این صورت همه رو نشون بده.حالا امکان داره داخل یک محل از یک سند فقط باطل باشه.از یک سند قطعی باشه و از یک سند جفتش.من دقیقا میخوام اون شماره سندی که در یک محل هم باطلش هست هم قطعیش باطل رو دیگه نشون نده.ولی اون سندی که باطل هست ولی قطعیش نیست نشون بده و اون سندی که قطعیش هست باطلش نیست نشون بده.مشکل من دقیقا اینجاست وقتی که یک سند باطل میشه و بعد قطعی میشه دیگه نمیخوام باطل رو در حواب بیاره

nedata
پنج شنبه 06 بهمن 1390, 13:21 عصر
Select id,Codekala,DocumentNo,status
From TableName t
where (Select Count(*) From TableName where Codekala=t.Codekala)=1
union
Select id,Codekala,DocumentNo,Status
From tableName t
where (Select Count(*) From TableName where Codekala=t.Codekala)>1 and status='قطعي'

Galawij
پنج شنبه 06 بهمن 1390, 13:56 عصر
سلام،
گفته بودم که با Select کردن روی With Result، می تونید نتیجه مورد انتظارتون را بگیرید. دستور زیر تمام 3 حالت شما را Support می کنه. می تونید متغیر kodkala را بعنوان شماره سند در نظر بگیرید. در ادامه دستور بالا:
Select * From Result where ((statuse=1) AND (Select COUNT(statuse) From Result)>1)
Union
Select * From Result where (statuse=2) AND (Select COUNT(statuse) From Result)=1
Union
Select * From Result where (statuse=1) AND (Select COUNT(statuse) From Result)=1

maktoom
پنج شنبه 06 بهمن 1390, 18:29 عصر
شاید این جور نگاه کردن حل رو راحت تر کنه:
اگر یک سند یک وضعیت داشت نشون بده. اگه دارای دو وضعیت بود فقط وضعیت مطلوب رو نشون بده.

pashna
پنج شنبه 06 بهمن 1390, 21:24 عصر
سلام، دوستان همه حرفه ای‌ هستند ولی‌ منم این راه حل به ذهنم رسید، خوشحال میشم اگر کمکتون کنه، من اول جدول خودم و میزارم براتون بعد طبق همون جواب و مطرح می‌کنم، این جدول من :
81522


حالا می‌خواهیم اگر در ۱ انبار از هر دو حالت وجود داشت فقط "همهٔ" حالت "برای فروش" را بیاورد ، اگر فقط حالت "برای فروش" وجود داشت همهٔ آنهارا بیاورد در غیر این صورت اگر فقط حالت "اتمام" وجود داشت، همهٔ آنها را بیاورد ( این برداشتِ من از سوالِ شما بود )


SELECT
A.*
FROM
dbo.Table_1 AS A
INNERJOIN dbo.Table_1 AS B ON A.Warehouse = B.Warehouse
AND A.Status<> B.Status
WHERE
A.Status='OnSale'
UNION
SELECT
DISTINCT
A
.*
FROM
dbo.Table_1 AS A
INNERJOIN dbo.Table_1 AS B ON A.Warehouse = B.Warehouse
AND A.Status= B.Status
WHERE
A.ProductID NOTIN(
SELECT A.ProductID
FROM dbo.Table_1 AS A
INNERJOIN dbo.Table_1 AS B ON A.Warehouse = B.Warehouse
AND A.Status<> B.Status)

mohammad.es24
یک شنبه 09 بهمن 1390, 09:31 صبح
من خودم به این صورت نوشتم.گفتم برای دوستان که کمکم کردن بزارم


SELECT DISTINCT A.*
FROM dbo.View_FinOrderNotRecieve AS A,
(SELECT ordernum, LocationRequest, COUNT(LocationRequest) AS CNT
FROM dbo.View_FinOrderNotRecieve
GROUP BY ordernum, LocationRequest
HAVING COUNT(LocationRequest) > 1) AS B
WHERE A.Ordernum = B.ordernum AND A.LocationRequest = B.LocationRequest AND A.RecieveStatus = 2
UNION ALL
SELECT *
FROM dbo.View_FinOrderNotRecieve A
WHERE NOT EXISTS
(SELECT OrderNum, LocationRequest
FROM dbo.View_FinOrderNotRecieve
WHERE A.Ordernum = OrderNum AND A.LocationRequest = LocationRequest
GROUP BY OrderNum, LocationRequest
HAVING COUNT(LocationRequest) > 1)