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

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [SQL] طلب تجميع استعلام (/showthread.php?tid=44300)



طلب تجميع استعلام - salamandal - 12-11-22

السلام عليكم

ارجو من الاخوة المبرمجين و الاعضاء المساعدة في تجميع هذا الاستعلام الذي استعمله لحساب المخزون من جدولين 
 ساشرح بعض الحقول المهمة هنا

جدول المنتجات  TB_Product 

اهم حقوله StartQntt وهي الكمية عند بداية الفترة
الباقي اعتقد لا يحتاج الى شرح 

وجدول الحركة (مبيعات و مشتريات ...الخ)  TB_Sell_Buy

ID_products رقم المنتج وهو مفتاح ثانوي في العلاقة بين الجدولين
ID_Client رقم الزبون
Quantite الكمية
Price هو السعر الذي تم البيع به (غير ثابت)
Op_Date تاريخ العملية او المستند(الوثيقة)
Number  رقم المستند
Code_opperation كود العملية : اذا كانت قيمته اقل او يساوي 10 فهي حركة مخاريج 
واذا كانت اكبر من 10 فهي حركة مداخيل 

الكود

كود :
DECLARE @d1 datetime
set @d1 = '01.31.2021'


Select Distinct(ID_Prdct),Products,

(StartQntt+COALESCE((select sum(Quantite)from TB_Sell_Buy where TB_Sell_Buy.ID_products = TB_Product.ID_Prdct and Op_Date <= @d1 and Code_opperation >10),0))-
COALESCE((select sum(Quantite)
from TB_Sell_Buy where TB_Sell_Buy.ID_products = TB_Product.ID_Prdct and Op_Date <= @d1 and Code_opperation<=10),0)as Reste,Prix_Achat,
((StartQntt+COALESCE((select sum(Quantite)from TB_Sell_Buy where TB_Sell_Buy.ID_products = TB_Product.ID_Prdct and Op_Date <= @d1 and Code_opperation >10),0))-
COALESCE((select sum(Quantite)
from TB_Sell_Buy where TB_Sell_Buy.ID_products = TB_Product.ID_Prdct and Op_Date <= @d1 and Code_opperation<=10),0))*Prix_Achat as Decompte  
from TB_Product
full JOIN TB_Sell_Buy on TB_Sell_Buy.ID_products = TB_Product.ID_Prdct  order by Products


هذا الاستعلام لحساب المخزون عند يوم محدد 
وانا احاول تعديله ليظهر قيمة المخزون عند كل يوم لفترة محددة(مثلا شهر)
كحل مؤقت وصلت الى طريقة غير مرضية لانها ليست عملية  Huh

الطريقة التي اعمل بها حاليا تمر بعدة مراحل : 
اولا  :تحميل كل التواريخ دون تكرار Distinct الى داتاتيبل Datatable
ثانيا : اضافة عمود للداتاتيبل 
ثالثا : حساب قيمة المخزون عند كل تاريخ ووضعها في العمود الذي تمت اضافته سابقا لاداة داتاتيبل
رابعا : تحميل الداتاتيبل الى اداة العرض داتاجريد فيو

كود :
     Connect()
       If sqlCnn.State = ConnectionState.Closed Then sqlCnn.Open()

       Try
           Dim da1 As New SqlDataAdapter("select Distinct(Op_Date) as Date from TB_Sell_Buy order by Op_Date ", sqlCnn)

           dt1.Clear()
           da1.Fill(dt1)
           dt1.Columns.Add("Stocke")
           da1.Dispose()
           For Each rw As DataRow In dt1.Rows
               Try
                   Dim da2 As New SqlDataAdapter("Select ID_Prdct, " & _
                   "cast(((StartQntt+COALESCE((select sum(Quantite)from TB_Sell_Buy where TB_Sell_Buy.ID_products = TB_Product.ID_Prdct and Op_Date <= @d1 and Code_opperation >10),0))- " & _
                   " COALESCE((select sum(Quantite)from TB_Sell_Buy where TB_Sell_Buy.ID_products = TB_Product.ID_Prdct and Op_Date <= @d1 and Code_opperation<=10),0))*Prix_Achat as Decimal(18,2)) as Decompte " & _
                   " from TB_Product " & _
                   " full JOIN TB_Sell_Buy on TB_Sell_Buy.ID_products = TB_Product.ID_Prdct " & _
                   " group by ID_Prdct,StartQntt,Prix_Achat ", sqlCnn)

                   dt2.Clear()
                   da2.SelectCommand.Parameters.AddWithValue("@d1", rw(0))
                   da2.Fill(dt2)

                   rw(1) = dt2.Compute("SUM(Decompte)", "")

               Catch ex As Exception
                   MsgBox(Err.Description, MsgBoxStyle.Information)
               End Try
           Next
           da2.Dispose()
           dt2.Clear()
           dt2.Dispose()
           DataGridView1.DataSource = dt1
         
       Catch ex As Exception
           MsgBox(Err.Description, MsgBoxStyle.Information)
       End Try

       If sqlCnn.State = ConnectionState.Open Then sqlCnn.Close()




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


RE: طلب تجميع استعلام - aliday03 - 17-11-22

السلام عليكم
دائما مثل هاته الاسئلة جهز لها السكربت بتاع السيكوال و كمان الداتا فيها عشان سهولة الوصول الى المصدر و التعديل عليه