لفهم كيفية إنشاء إجراء (Procedure) في قاعدة البيانات الخاصة بك لعرض قائمة بجميع عناصر المنتجات المنتهية (ProductFinished)، وعرض المكونات، مع سعر الوحدة للمكون وإجمالي تكلفة المنتج المنتهي، يجب أولاً عمل استعلام (Query) يستخدم دالة الـ SUM
لحساب إجمالي التكلفة لكل منتج منتهي. ثم، يجب إنشاء إجراء يستدعي هذا الاستعلام ويقوم بتنسيق النتائج بالشكل المطلوب.
في البداية، قم بإنشاء الاستعلام الذي يعيد البيانات التي تحتاجها. لاحظ أن الجدول ProductRawMaterial
هو الذي يحتوي على معلومات المكونات وأسعارها:
sqlSELECT
pf.NameFInishedProduct AS ProductName,
pr.NameRawProduct AS IngredientName,
pr.BuyPrice AS UnitPrice,
COUNT(pr.NameRawProduct) AS Quantity,
SUM(pr.BuyPrice) AS TotalIngredientCost
FROM
ProductFinished pf
JOIN
ProductRawMaterial pr ON pf.ID_FinishedProduct = pr.ID_FinishedProduct
GROUP BY
pf.NameFInishedProduct, pr.NameRawProduct, pr.BuyPrice
ثم، يمكنك استخدام هذا الاستعلام في إنشاء إجراء يقوم بتنسيق النتائج كما تحتاج. وهنا يكون الاجراء مثاليًا لتنسيق النتائج وإرجاعها بالشكل المطلوب:
sqlCREATE PROCEDURE GetFinishedProductDetails
AS
BEGIN
SELECT
'The product ' + pf.NameFInishedProduct + ' is composed of' AS ProductDetails,
CAST(COUNT(pr.NameRawProduct) AS NVARCHAR) + ' ' + pr.NameRawProduct + ' priced ' + CAST(pr.BuyPrice AS NVARCHAR) + ' € each' AS IngredientDetails,
'The total price of the ' + pf.NameFInishedProduct + ' is ' + CAST(SUM(pr.BuyPrice) AS NVARCHAR) + ' €.' AS TotalPrice
FROM
ProductFinished pf
JOIN
ProductRawMaterial pr ON pf.ID_FinishedProduct = pr.ID_FinishedProduct
GROUP BY
pf.NameFInishedProduct, pr.NameRawProduct, pr.BuyPrice
END
يجب أن يساعد هذا الإجراء في عرض المنتجات المنتهية ومكوناتها مع تكلفتها الإجمالية بالشكل المطلوب. يمكنك تنفيذ الإجراء باستخدام الاستدعاء التالي:
sqlEXEC GetFinishedProductDetails
يرجى ملاحظة أنه قد تحتاج إلى ضبط الاستعلام والإجراء بناءً على هيكل قاعدة البيانات الفعلي الذي تعمل عليه، وقد تحتاج إلى تغيير بعض التفاصيل حسب ذلك.
المزيد من المعلومات
لتحسين استعلامك وتجنب الأخطاء المحتملة، يمكنك إضافة بعض المعلومات الإضافية والتحسينات إلى الاستعلام والإجراء. على سبيل المثال، يمكنك استخدام دالة CONCAT
لتوحيد النصوص بدلاً من استخدام العمليات الرياضية، ويمكنك أيضًا تحسين عرض النتائج لجعله أكثر وضوحًا. إليك الإجراء المحدث:
sqlCREATE PROCEDURE GetFinishedProductDetails
AS
BEGIN
SELECT
CONCAT('The product ', pf.NameFInishedProduct, ' is composed of') AS ProductDetails,
CONCAT(COUNT(pr.NameRawProduct), ' ', pr.NameRawProduct, ' priced ', pr.BuyPrice, ' € each') AS IngredientDetails,
CONCAT('The total price of the ', pf.NameFInishedProduct, ' is ', SUM(pr.BuyPrice), ' €.') AS TotalPrice
FROM
ProductFinished pf
JOIN
ProductRawMaterial pr ON pf.ID_FinishedProduct = pr.ID_FinishedProduct
GROUP BY
pf.NameFInishedProduct, pr.NameRawProduct, pr.BuyPrice
END
هذا التحسين يجعل النتائج أكثر وضوحًا وسهولة قراءة. كما يمكنك تحسين الإجراء بإضافة تعليقات للتوضيح وتحسين الأداء بتعيين قيم افتراضية للمدخلات إذا لزم الأمر.