للحصول على مجموع إجمالي لعمود معين في SQL Server مع الانضمامات، يجب أن تؤخذ بعين الاعتبار بعض النقاط الهامة لضمان الحصول على النتيجة الصحيحة. يبدو أن الاستعلام الذي تقدمه قريب جدًا من تحقيق الهدف، ولكن يبدو أن هناك بعض القضايا التي يجب معالجتها للوصول إلى النتيجة المطلوبة.
أولًا، يبدو أنك تقوم بجمع العمود cdin_NoofPackages
باستخدام الدالة SUM()
، مع تضمين باقي الأعمدة في جملة SELECT
وكذلك في الجملة GROUP BY
. هذا يعني أنك تقوم بتجميع البيانات بناءً على القيم المختلفة في الأعمدة الأخرى مع كل قيمة في cdin_NoofPackages
. إذا كنت تريد الحصول على إجمالي عمود محدد دون تقسيم الصفوف حسب الأعمدة الأخرى، فيجب أن تقوم بإزالة هذه الأعمدة من الـ GROUP BY
وترك فقط i.cdin_cdindexid
فيها.
-
حل مشكلة طباعة قائمة متسلسلة في لغة C30/01/2024
-
مشكلة تحميل الملفات في PHP01/04/2024
-
حل مشكلة Fatal Error في رأس قالب ووردبريس14/04/2024
ثانيًا، يجب التأكد من أن البيانات التي تقوم بالتحقق منها في الـ WHERE
تتناسب مع متطلباتك. قد تحتاج إلى مراجعة شروط الفلترة للتأكد من أنها تحقق ما تريد. على سبيل المثال، تحقق من أن تواريخ الفاتورة تتناسب مع الفترة التي تبحث فيها.
في النهاية، إليك نسخة معدلة من الاستعلام يمكن أن تساعدك في الوصول إلى النتيجة المرجوة:
sqlSELECT
SUM(i.cdin_NoofPackages) AS Total_Packages,
i.cdin_cdindexid AS cntdp
FROM
cdindex i
INNER JOIN company c ON i.cdin_CompanyId = c.Comp_CompanyId
INNER JOIN Territories t ON i.cdin_Secterr = t.Terr_TerritoryID
LEFT OUTER JOIN Performainv p ON i.cdin_cdindexid = p.pinv_cdindexid
WHERE
i.cdin_deleted IS NULL
AND c.comp_deleted IS NULL
AND t.Terr_Deleted IS NULL
AND (p.pinv_deleted IS NULL OR p.pinv_deleted = 0)
AND (p.pinv_InvoiceProperty = '01' OR p.pinv_InvoiceProperty IS NULL)
AND (p.pinv_Status IN ('Draft', 'Posted') OR p.pinv_status IS NULL)
AND i.cdin_startunstufdate BETWEEN '2016-07-01' AND '2016-07-11'
GROUP BY
i.cdin_cdindexid;
هذا الاستعلام يقوم بجمع عدد الحزم فقط دون تقسيم الصفوف حسب القيم الأخرى. يرجى تعديل التواريخ والشروط الأخرى حسب الاحتياجات الخاصة بك.
المزيد من المعلومات
بالطبع، سأقدم المزيد من المعلومات لمساعدتك في فهم الاستعلام وكيفية الحصول على النتائج الصحيحة.
-
استخدام دالة COALESCE:
تستخدم دالة COALESCE لتحديد القيم الافتراضية للأعمدة في حالة عدم وجود قيم لها. في الاستعلام الخاص بك، تستخدم COALESCE لضمان أن القيم المستردة للأعمدة مثلcdin_NoofPackages
،cdin_WT
،cdin_volumewt
، وcdin_MortgageAmount
لا تكون قيمًا فارغة. -
الانضمامات (Joins):
يقوم الاستعلام بعمليات الانضمام بين جداول مختلفة باستخدام العبارةINNER JOIN
للجداول التي يجب أن تتطابق الصفوف فيها، وLEFT OUTER JOIN
للجداول التي قد لا تكون هناك تطابقات لكل الصفوف فيها. في هذا الاستعلام، تنضم جداولcdindex
وcompany
وTerritories
وPerformainv
بناءً على الشروط المحددة. -
شروط الفلترة (Filtering Conditions):
يحدد شروط الفلترة في الجملةWHERE
الصفوف التي يتم احتسابها في النتيجة النهائية. في الاستعلام الخاص بك، تقوم بتصفية الصفوف بناءً على الشروط المحددة مثل عدم حذف السجلات (Is NULL
) وحالة الفاتورة (p.pinv_Status
) والتواريخ (i.cdin_startunstufdate
). -
التجميع (Grouping):
يستخدم الاستعلام جملةGROUP BY
لتجميع الصفوف بناءً على قيمة محددة في العمودcdin_cdindexid
. هذا يعني أنه سيتم تجميع الصفوف التي تحتوي على نفس قيمةcdin_cdindexid
معًا، وسيتم حساب مجموع الحزم لكل قيمة فريدة. -
النتيجة:
يتوقع أن يقوم الاستعلام بإرجاع مجموع عدد الحزم (cdin_NoofPackages
) مجتمعة معًا لكل قيمة مختلفة في العمودcdin_cdindexid
.
من المهم فهم كيفية عمل الاستعلام وتأثير كل جزء منه على النتائج النهائية. قد تحتاج أحيانًا إلى ضبط الشروط أو عمليات الانضمام للحصول على النتائج المرغوب فيها، ويمكنك دائمًا استشارة الوثائق الخاصة بـ SQL Server لمزيد من التفاصيل حول الدوال والاستعلامات المتاحة.