الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف اختبر شرط ثنائي في عمودين في عبارة Where

مغلق
بدأه Desigen في 6 مارس 2006 · 7 رد · 620 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

يعطيكم العافية

بدي اختبر شرط ثنائي في عبارة Wher

يعني عامودين في Where

و كمثال عليه

أريد أسماء الأطباء الذين أجروا أغلى تحليل في السنة الموافقة

يعني :

السنة الطبيب القيمة

2005 1 12

2005 2 11

2003 1 10

2003 3 12

و بالتالي نلاحظ إنه لازم يطلع عندى السطر الأول لسنة 2005

و السطر الأخير لسنة 2003

و هذا يعني إنه لازم يتوافق كل من رقم الطبيب مع السنة في عبارة الشرط

Where

بمعنى أخر كيف بدي حقق هذا التعبير

Select 
	D.FName , 
	D.LName ,
	Year ( OrderDate ) 
From
	Doctor D , Orders
Where
	D.DocId = Orders.DocId AND
	( D.DocId , Year ( OrderDate ) ) IN 
	(
  ......
	)

كيف ممكن حقق الشرط المزدوج هاذ

( D.DocId , Year ( OrderDate ) ) IN

شكرا لكم

#2

أخي في الله Design

انت تريد اسماء الاطباء الذين أجروا أغلى تحليل في كل السنين ام في سنة معينة

وفي كلا الحالتين سوف تستخدم Subquery وعلى اعتبار ان عمود القيمة اسمه value

اذا كان في كل السنين سوف تستخدم هذا الكود

Select D.FName , D.LName ,Year(OrderDate ) 
From Doctor D , Orders
Where D.DocId = Orders.DocId 
AND Orders.value = (select max(value)from Orders)

واذا كان في سنة معينة 2005 مثلاً سوف يكون كالتالي

Select D.FName , D.LName ,Year(OrderDate) 
From Doctor D , Orders
Where D.DocId = Orders.DocId 
AND Orders.value = (select max(value)from Orders where Year(OrderDate)= 2005)

أرجو ان تجرب ذلك وتخبرني ان كنت فهمت قصدك أم لا

كن لله كما يريد يكن لك فوق ما تريد

#3

شكرا لردك

المشكلة هي كالتالي لدي الجدول التالي

اقتباس
AnalysisId PatientId OrderDate  Price

1 7 2006-03-03 00:00:00.000 180.0000

2 4 2006-03-02 00:00:00.000 1100.0000

3 3 2006-03-03 00:00:00.000 6260.0000

4 7 2006-03-03 00:00:00.000 400.0000

5 4 2005-01-12 00:00:00.000 6260.0000

6 1 2003-01-12 00:00:00.000 1680.0000

7 1 2003-02-02 00:00:00.000 400.0000

كما تلاحظ إنه إنه عندي عدة سنوات و عندي عدة أسعار

المطلوب مني إني طلع أرقام المرضى

يلي عموا التحليل الأعلى في كل سنة

هذا الشيئ ممكن يصير بهذا الإستعلام

Select 
	Year ( OrderDate ) , 
	Max ( Price ) 
From
	#PatientHowMakeTheMostExpensiveAnalysisInThereYear X 
Group By
	Year ( OrderDate )

كما تلاحظ لقد اخترت فقط السنة و السعر الأعلى

كل شيئ تمام

لكن كيف ممكن اكتب استعلام يرجع لي أسمائهم بالإعتماد على الإستعلام السابق

يعني في Oracle ممكن اكتب

Select 
	PatientName 
From 
	Patient , #X
Where
	#X.PId = Patient.PId 
And
	( #X.PId , #X.Price ) IN 
...........

إذا فهمت على أنا عندي استعلام فرعي

يرجع لي قيمتين

كيف ممكن اختبر هذه القيمتين

في عبارة Where

للإستعلام الأب

في MS SQL

شكرا لك

و أسف على الإطالة

#4

أخي Design

Select 
Year ( OrderDate ) , 
Max ( Price ) 
From
#PatientHowMakeTheMostExpensiveAnalysisInThereYear X 
Group By
Year ( OrderDate )

انت معي ان الاستعلام الأول حقق لك النتيجة المرجوة لكنك تريد اسمائهم بالاعتماد على الأستعلام السابق

بذلك يمكنك كتابة الجملة على هذا النحو

Select 
Year ( OrderDate ) , 
Max ( Price ) ,
PatientName 
From
Patient , #X
Where
#X.PId = Patient.PId  
Group By
Year ( OrderDate )

اذاً ما المشكلة اذا مازلت لم افهم ما تريد اخبرني لكي أحاول مرة أخرى وأرجو منك تجربة الأكواد التي

أرسلها لك عل وعسى أن تحقق المطلوب باذن الله

-waf

كن لله كما يريد يكن لك فوق ما تريد

#5

شو المشكلة !

المشكلة تكمن أن الأستعلام الأول يرجع

أعلى سعر لتحليل في سنة كاملة

على فرض أنه يوجد لدي أكثر من مريض لهم

نفس السعر في نفس السنة

كيف بدي اكتب استعلام أب

يستدي الإستعلام الفرعي و يأتي

بالمرضى في نفس السنة لهم نفس السعر

هل فهمت ماذا أقصد ؟

شكرا لك

#6
اقتباس
على فرض أنه يوجد لدي أكثر من مريض لهم

نفس السعر في نفس السنة

فهمت من كلامك انه يرجع لك أعلى سعر لكن لو هناك أكثر من مريض لهم نفس السعر لم يأتي بهم

اذاً يمكنك أن تكتب جملة ال Group by هكذا

Group By
Year ( OrderDate ),#X.PId

بذلك سوف يكرر القيمة باختلاف المريض

هل هذا هو ماتريده ؟

أتمنى أن أكون أفدتك بشئ ولو قليل

كن لله كما يريد يكن لك فوق ما تريد

#7

بصراحة مو كثير

أنا بدي أعمل شرط ثنائي على عبارة Where

يعني

Where ( X , Y ) IN ( ..... )

ما بدي أعمل

Where X IN ( .... ) And Y = IN ( ... )

إن شالله تكون عرفت شو عم اقصد

شكرا لك

#8

هل يوجد أي اقتراح

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…