منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : عمل شرط داخل استعلام
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم ورحمة الله تعالى وبركاته
الأساتذة الكرام رجاءا عندي حقل أريد عمل استعلام بشرط تحقق قيمة معينة فيه يقوم بعملية حسابية داخل نفس الإستعلام  كيف يتم ذلك
قاعدة البيانات sql server
ألف شكر لكم مسبقا
وضح أكثر ما تقصد "يقوم بعملية حسابية داخل نفس الإستعلام" وضع مثال
ألف شكر مسبقا
SELECT dbo.Facture_L.Num_Vent, dbo.Facture_L.Num_Fact_Vent, dbo.Facture_L.ID_Prod, dbo.Facture_L.UM, dbo.UM.Nom_UM,iif(dbo.Facture_L.UM = 1, dbo.Facture_L.Qte_V, dbo.Facture_L.Qte_V * 0.02) as Qte, dbo.Facture_L.Prix_V
FROM dbo.Facture_L INNER JOIN
dbo.UM ON dbo.Facture_L.UM = dbo.UM.ID_UM

لو هذا الحلق dbo.Facture_L.UM قيمته تساوي 1 نضرب قيمة الحقل dbo.Facture_L.Qte_V في 0.02 أما لو كانت غير ذلك تبقى قيمة الحقل dbo.Facture_L.Qte_V كما هي
أرجوا أن أكون قد وضحت الفكرة
ألف شكر مرة ثانية
انت عاملها بس انك عكستها
كود :
IIF(Facture_L.UM = 1, Facture_L.Qte_V * 0.02 , Facture_L.Qte_V) AS Qte
تطلع لي رسالة الخطأ التالية :
Error in list of function arguments: '=' not recognized.
Unable to parse query text.
يبدو ان نوع العمود Facture_L.UM ليس رقمي
ضعه داخل رمز '
كود :
IIF(Facture_L.UM = '1', Facture_L.Qte_V * 0.02 , Facture_L.Qte_V) AS Qte
نفس الرسالة
هل يمكن استعمال if ; then
وجدت لك الطريقة عذرا لعدم خبرتي في sql server
كود :
CAST(CASE WHEN (Facture_L.UM = 1) THEN (Facture_L.Qte_V * 0.02) ELSE (Facture_L.Qte_V) END AS FLOAT) AS Qte
طيب وهذا الإستعلام ؟
declare @UM Int  
set @UM Int  = (SELECT     dbo.Facture_L.UM FROM  dbo.Facture_L)
if @Um = '1' then SELECT     dbo.Facture_L.Num_Vent, dbo.Facture_L.Num_Fact_Vent, dbo.Facture_L.ID_Prod, dbo.Facture_L.UM, dbo.UM.Nom_UM, Facture_L.Qte_V * 0.02 AS Qte
FROM         dbo.Facture_L INNER JOIN
                      dbo.UM ON dbo.Facture_L.UM = dbo.UM.ID_UM

بتطلع لي هذه الرسالة :

[attachment=14306]
جرب هذا الاستعلام بعد التعديل
كود :
SELECT Facture_L.Num_Vent,
      Facture_L.Num_Fact_Vent,
      Facture_L.ID_Prod,
      Facture_L.UM,
      UM.Nom_UM,
      CAST(CASE WHEN (Facture_L.UM = 1) THEN (Facture_L.Qte_V * 0.02) ELSE (Facture_L.Qte_V) END AS FLOAT) AS Qte,
      Facture_L.Prix_V
FROM   Facture_L
INNER JOIN UM ON Facture_L.UM = UM.ID_UM
الصفحات : 1 2