منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
عمل شرط داخل استعلام - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم أسئلة واستفسارات الأعضاء - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=94)
+--- قسم : Microsoft SQL Server (http://vb4arb.com/vb/forumdisplay.php?fid=171)
+--- الموضوع : عمل شرط داخل استعلام (/showthread.php?tid=20485)

الصفحات: 1 2


RE: عمل شرط داخل استعلام - djelloul - 21-05-17

ألف شكر لك فقط لوكان بالإمكان شرح وجيز لكي أفهمه لأني سأضيف شروطا أخرى في الإستعلام
ألف شكر لكم مرة أخرى


RE: عمل شرط داخل استعلام - alma2 - 21-05-17

يوجد اختصار للجزئية المطلوبة أي بدون CAST
كود :
SELECT Facture_L.Num_Vent,
      Facture_L.Num_Fact_Vent,
      Facture_L.ID_Prod,
      Facture_L.UM,
      UM.Nom_UM,
      (CASE WHEN (Facture_L.UM = 1) THEN (Facture_L.Qte_V * 0.02) ELSE (Facture_L.Qte_V) END) AS Qte,
      Facture_L.Prix_V
FROM   Facture_L
INNER JOIN UM ON Facture_L.UM = UM.ID_UM

ولتوضيحها فهي تعادل If Then Else
If = CASE WHEN
Then = THEN
Else = ELSE

انا لم أكن أعرفها إلا الآن بفضل سؤالك ومحاولة ايجاد جوابه

حتى أنا تتعامل مع تعدد الحالات مثل
كود :
CASE Facture_L.UM
 WHEN 1 THEN (Facture_L.Qte_V * 0.02)
 WHEN 2 THEN (Facture_L.Qte_V * 0.04)
 WHEN 3 THEN (Facture_L.Qte_V * 0.06)
 WHEN 4 THEN (Facture_L.Qte_V * 0.08)
 WHEN 5 THEN (Facture_L.Qte_V * 0.10)
 ELSE (Facture_L.Qte_V)
END AS Qte


ويمكن كتابة الاستعلام بالشكل التالي ويعمل ايضا
كود :
SELECT Facture_L.Num_Vent,
      Facture_L.Num_Fact_Vent,
      Facture_L.ID_Prod,
      Facture_L.UM,
      UM.Nom_UM,
      (CASE (Facture_L.UM) WHEN (1) THEN (Facture_L.Qte_V * 0.02) ELSE (Facture_L.Qte_V) END) AS Qte,
      Facture_L.Prix_V
FROM   Facture_L
INNER JOIN UM ON Facture_L.UM = UM.ID_UM



RE: عمل شرط داخل استعلام - djelloul - 21-05-17

ألف شكر لك أخي الكريم تم بحمد الله وتوجيهاتك الإستعلام يعمل ولله الحمد والشكر ولكم الفضل

الإستعلام بشكله النهائي هو 

[attachment=14309]


RE: عمل شرط داخل استعلام - alma2 - 21-05-17

لا تحتاج إلى كتابة CAST ولا تحتاج أن تذكر WHEN 1 أو WHEN 2 لأنك ستضرب في 1 وكأن شيئا لم يكن

اكتفي بالحالات التي ستعطي نتيجة مختلفة عند ضربها
والتي حسب الاستعلام الأخير لك تحتاج عملية فقط عندما يكون الرقم 3 أو 4 فقط
كود :
(CASE (Facture_L.UM) WHEN (3) THEN (Facture_L.Qte_V * 0.01) WHEN (4) THEN (Facture_L.Qte_V * 0.02) ELSE (Facture_L.Qte_V) END) AS Qte,
لاحظ لم أكتب CAST لأنك لا تحتاجها