المشاركات : 21
المواضيع 0
الإنتساب : Oct 2022
السمعة :
6
الشكر: 23
تم شكره 34 مرات في 26 مشاركات
16-10-22, 11:16 AM
(آخر تعديل لهذه المشاركة : 16-10-22, 11:29 AM {2} بواسطة Meen2.
تعديل السبب: تنسيق الكود
)
(15-10-22, 06:44 PM)maxruined كتب : (15-10-22, 04:37 PM)Meen2 كتب : مثل ما ذكر الأخ طه ما شاء الله تبارك الله، ملاحظة دقيقة
(12-10-22, 02:53 PM)Taha Okla كتب : عندما تريد تنفيذ هذا الكود يجب أن لا يكون هناك قيم مكررة لكل مفتاح رئيسي في كلا الجدولين(يعني فقط سجل في كل جدول)،
قم بإضافة عمود ID كمفتاح أساسي PrimaryKey من نوع ترقيم تلقائي Identity (في كلا الجدولين)
كود :
SELECT TBL_Products_Received_Details.Product_S_N AS 'Product SN',
SUM(TBL_Products_Received_Details.Quantity) AS 'Total Received',
SUM(TBL_Outgoing_Products_Details.Quantity) AS 'Total Outgoing'
FROM TBL_Products_Received_Details
INNER JOIN TBL_Outgoing_Products_Details
ON TBL_Outgoing_Products_Details.ID = TBL_Products_Received_Details.ID
GROUP BY TBL_Products_Received_Details.Product_S_N
السلام عليكم اخوي
حقيقي شكراً جداً على تفاعلك معي
انا عملت كدا بالفعل ولكن للاسف مش بيعطيني مجموع كل القيم مظبوط مثل ما انا كاتب بالاستعلام
يعني مثلا دا الجدول الاول اللي بجيب منه كل مجموع قيم ال Quantity
للعلم لو تم إضافه سطر جديد الاستعلام اللى تحت مش بيشوفه اصلا
ودا صورة الجدول الثانى اللي بجيب منه كل مجموع قيم Quantity
ودا شكل الاستعلام وزى ما موضح بالصورة انه جايب فقط كل قيم العامود الاول وهو Total Received صحيحه ولكن مثل ما ذكرت فوق انه لو تم اضافه سطر جديد في [b]العامود الاول وهو Total Received مش هيجيب غير ال 6 اسطر دول فقط [/b]
وبالنسبة للجدول الثانى فالمفروض تكون القيم كالاتي
الصنف الاول وهو 4011 المفروض تكون قيمته 26 وليس 12
الصنف الاول وهو 4012 المفروض تكون قيمته 4 وليس 2
الصنف الاول وهو 4013 المفروض تكون قيمته 31 وليس 8
الصنف الاول وهو 4014 المفروض تكون قيمته 4 وليس 1
الصنف الاول وهو 4015 المفروض تكون قيمته 55 وليس 18
الصنف الاول وهو 4016 المفروض تكون قيمته 5 وليس 3
بتمني مساعدتي في حل المشكلة دى حقيقي مش عارف المشكلة من فين ... هتجنني
كود :
SELECT TBL_Products_Received_Details.Product_S_N AS 'Product SN',
SUM(DISTINCT TBL_Products_Received_Details.Quantity) AS 'Total Received',
SUM(TBL_Outgoing_Products_Details.Quantity) AS 'Total Outgoing'
FROM TBL_Products_Received_Details
INNER JOIN TBL_Outgoing_Products_Details
ON TBL_Outgoing_Products_Details.Product_S_N = TBL_Products_Received_Details.Product_S_N
GROUP BY TBL_Products_Received_Details.Product_S_N
المشاركات : 186
المواضيع 33
الإنتساب : Dec 2018
السمعة :
1
الشكر: 187
تم شكره 152 مرات في 106 مشاركات
(16-10-22, 11:16 AM)Meen2 كتب : (15-10-22, 06:44 PM)maxruined كتب : (15-10-22, 04:37 PM)Meen2 كتب : مثل ما ذكر الأخ طه ما شاء الله تبارك الله، ملاحظة دقيقة
(12-10-22, 02:53 PM)Taha Okla كتب : عندما تريد تنفيذ هذا الكود يجب أن لا يكون هناك قيم مكررة لكل مفتاح رئيسي في كلا الجدولين(يعني فقط سجل في كل جدول)،
قم بإضافة عمود ID كمفتاح أساسي PrimaryKey من نوع ترقيم تلقائي Identity (في كلا الجدولين)
كود :
SELECT TBL_Products_Received_Details.Product_S_N AS 'Product SN',
SUM(TBL_Products_Received_Details.Quantity) AS 'Total Received',
SUM(TBL_Outgoing_Products_Details.Quantity) AS 'Total Outgoing'
FROM TBL_Products_Received_Details
INNER JOIN TBL_Outgoing_Products_Details
ON TBL_Outgoing_Products_Details.ID = TBL_Products_Received_Details.ID
GROUP BY TBL_Products_Received_Details.Product_S_N
السلام عليكم اخوي
حقيقي شكراً جداً على تفاعلك معي
انا عملت كدا بالفعل ولكن للاسف مش بيعطيني مجموع كل القيم مظبوط مثل ما انا كاتب بالاستعلام
يعني مثلا دا الجدول الاول اللي بجيب منه كل مجموع قيم ال Quantity
للعلم لو تم إضافه سطر جديد الاستعلام اللى تحت مش بيشوفه اصلا
ودا صورة الجدول الثانى اللي بجيب منه كل مجموع قيم Quantity
ودا شكل الاستعلام وزى ما موضح بالصورة انه جايب فقط كل قيم العامود الاول وهو Total Received صحيحه ولكن مثل ما ذكرت فوق انه لو تم اضافه سطر جديد في [b]العامود الاول وهو Total Received مش هيجيب غير ال 6 اسطر دول فقط [/b]
وبالنسبة للجدول الثانى فالمفروض تكون القيم كالاتي
الصنف الاول وهو 4011 المفروض تكون قيمته 26 وليس 12
الصنف الاول وهو 4012 المفروض تكون قيمته 4 وليس 2
الصنف الاول وهو 4013 المفروض تكون قيمته 31 وليس 8
الصنف الاول وهو 4014 المفروض تكون قيمته 4 وليس 1
الصنف الاول وهو 4015 المفروض تكون قيمته 55 وليس 18
الصنف الاول وهو 4016 المفروض تكون قيمته 5 وليس 3
بتمني مساعدتي في حل المشكلة دى حقيقي مش عارف المشكلة من فين ... هتجنني
كود :
SELECT TBL_Products_Received_Details.Product_S_N AS 'Product SN',
SUM(DISTINCT TBL_Products_Received_Details.Quantity) AS 'Total Received',
SUM(TBL_Outgoing_Products_Details.Quantity) AS 'Total Outgoing'
FROM TBL_Products_Received_Details
INNER JOIN TBL_Outgoing_Products_Details
ON TBL_Outgoing_Products_Details.Product_S_N = TBL_Products_Received_Details.Product_S_N
GROUP BY TBL_Products_Received_Details.Product_S_N
شكراً جداً اخوي علي مساعدتك
بس لو تكرمت ممكن تشرحلي كانت فين المشكلة بالظبط وما معني هذا DISTINCT
المشاركات : 21
المواضيع 0
الإنتساب : Oct 2022
السمعة :
6
الشكر: 23
تم شكره 34 مرات في 26 مشاركات
(16-10-22, 11:55 AM)maxruined كتب : بس لو تكرمت ممكن تشرحلي كانت فين المشكلة بالظبط وما معني هذا DISTINCT
https://mulham.github.io/sql/select-distinct
إقتباس :يستخدم تصريح SELECT DISTINCT للحصول على القيم المختلفة فقط .
https://wiki.hsoub.com/SQL/distinct
إقتباس :تستخدم العبارة DISTINCT للحصول على قيمٍ فريدةٍ غير مكررة، وغالبًا ما تستخدم في استعلام SELECT للحصول على سجلات لا تتكرر القيم فيما بينها، إذ يصبح الاستعلام بالشكل الآتي:
المشاركات : 186
المواضيع 33
الإنتساب : Dec 2018
السمعة :
1
الشكر: 187
تم شكره 152 مرات في 106 مشاركات
(16-10-22, 12:16 PM)Meen2 كتب : (16-10-22, 11:55 AM)maxruined كتب : بس لو تكرمت ممكن تشرحلي كانت فين المشكلة بالظبط وما معني هذا DISTINCT
https://mulham.github.io/sql/select-distinct
إقتباس :يستخدم تصريح SELECT DISTINCT للحصول على القيم المختلفة فقط .
https://wiki.hsoub.com/SQL/distinct
إقتباس :تستخدم العبارة DISTINCT للحصول على قيمٍ فريدةٍ غير مكررة، وغالبًا ما تستخدم في استعلام SELECT للحصول على سجلات لا تتكرر القيم فيما بينها، إذ يصبح الاستعلام بالشكل الآتي:
حقيقي اخوي شكراً جداً علي مساعدتك
ولكن سؤال اخير انا المفروض معنديش اي قيم متطابقه علشان استخدم هذا الامر ولكن الحقيقه هو اشتغل تمام ولكن مش فاهم ليه ؟؟ !!
فين السجلات المتطابقه اصلا عندي !!!؟؟؟
حقيقي مش فاهم كويس ايه اللي بيحصل
المشاركات : 21
المواضيع 0
الإنتساب : Oct 2022
السمعة :
6
الشكر: 23
تم شكره 34 مرات في 26 مشاركات
(16-10-22, 12:56 PM)maxruined كتب : ولكن سؤال اخير انا المفروض معنديش اي قيم متطابقه علشان استخدم هذا الامر ولكن الحقيقه هو اشتغل تمام ولكن مش فاهم ليه ؟؟ !!
فين السجلات المتطابقه اصلا عندي !!!؟؟؟
حقيقي مش فاهم كويس ايه اللي بيحصل
اعتقد المسالة تتعلق بادخال الجدول TBL_Products_Received_Details في التجميع بدون داعي فتسبب بهذا الارباك
مما اضطرني لاستخدام DISTINCT مع ذلك الجدول لتحقيق النتيجة التي تتطلع لها انت فقط
منطقيا التجميع مطلوب في الجدول TBL_Outgoing_Products_Details فيكون العمل بهذا الكود فقط
كود :
SELECT TBL_Outgoing_Products_Details.Product_S_N AS 'Product SN',
SUM(TBL_Outgoing_Products_Details.Quantity) AS 'Total Outgoing'
FROM TBL_Outgoing_Products_Details
GROUP BY TBL_Outgoing_Products_Details.Product_S_N
المشاركات : 1,262
المواضيع 16
الإنتساب : May 2016
السمعة :
291
الشكر: 801
تم شكره 2223 مرات في 1168 مشاركات
(16-10-22, 12:56 PM)maxruined كتب : (16-10-22, 12:16 PM)Meen2 كتب : إقتباس :تستخدم العبارة DISTINCT للحصول على قيمٍ فريدةٍ غير مكررة، وغالبًا ما تستخدم في استعلام SELECT للحصول على سجلات لا تتكرر القيم فيما بينها، إذ يصبح الاستعلام بالشكل الآتي:
حقيقي اخوي شكراً جداً علي مساعدتك
ولكن سؤال اخير انا المفروض معنديش اي قيم متطابقه علشان استخدم هذا الامر ولكن الحقيقه هو اشتغل تمام ولكن مش فاهم ليه ؟؟ !!
فين السجلات المتطابقه اصلا عندي !!!؟؟؟
حقيقي مش فاهم كويس ايه اللي بيحصل
القيم غير موجودة أساساً كما تفضلت - ولكن عند الربط بينها سيقوم كود الـ SQL على تكرار تلك القيم (إعتماداً على مطابقات رياضية كنوع يشبه التراتيب والتوافيق) لكي لا يصبح في الجدول الجديد حقول من الجدول الأول لا يطابقها حقول من الجدول الثاني (وهذا هو سبب الخطأ الذي حدث معك في نواتج عملية الجمع).
ومع ذلك حتى الكود الذي طرحه الأخ (Meen2) ليس بالكود القياسي حتى الآن (من وجهة نظري- ربما غير له وجهة نظر أخرى) فـ بالرغم من تطابق الحلول حالياً لكن أظن أنه سينشأ عن ذلك أخطاء في المستقبل لسبب أجهله.
أظن أن الحل هو : أن يتم عمل جدول (جدول إفتراضي عن طريق الكود) جديد ناتج عن الجدول الأول بواسطة الوظيفة (Group By) ليمنع تكرر القيم بل ليجمعها للحقل ( Product_S_N) أي (جدول جديد عن كل جدول من الجدولين السابقين ).
ومن هاذين الجدولين الجديدين يقوم بتطبيق خاصية ( INNER JOIN) مع خاصية الجمع للحقيلن المطلوبين فتحصل على الهدف،،
كنت أود أن أقدم هذا الحل، لكن للأسف ليس على أي جهاز من أجهزتي، برنامج الـ SQL ولا أرغب بتنزيله حالياً..
وصعب علي التخيل بدون تجريب ( فلست بالمحترف أو المتخصص في هذا المجال، ولكن يبقى عندي حدس يرشدني للحل الأصح والأسلم).
أما سبب عدم تعاملي مع قواعد الـ SQL : (من وجهة نظري) لا أظن أن هناك داعي له ما دام قواعد الـ Ms.Access تفي بالغرض لكل البرامج التي أتعامل بها حتى الآن، فهي تعطيني أكثر مما أطلبه منها وزيادة على بساطة الاستخدام و والاتصال والوصول والآمان الغير موجود في الـ قواعد الـ SQL.، قواعد الـ MS.Access عن تجربة تستوعب بيانات حتى 2G بدون مشاكل وسريعة الاستجابة. وكـ برامج حسابية أتعامل بها لا تستلزم أصلاً ربع هذا الحجم فلما أعقد برامجي وأثقل أجهزتي ببرامج لا داعي لها..
قواعد الـ SQL تبدو الضرورة لها في برامج الأرشيف كـ برامج العلاقات العامة والمواقع المنتديات وليس برامج الحسابات(في الشبكات الداخلية).
قال صلى الله عليه وسلم:
«كلمتان خفيفتان على اللسان
ثقيلتان في الميزان،حبيبتان إلى الرحمن:
سبحان الله وبحمده، سبحان الله العظيم».
المشاركات : 21
المواضيع 0
الإنتساب : Oct 2022
السمعة :
6
الشكر: 23
تم شكره 34 مرات في 26 مشاركات
ما شاء الله أستاذ طه
(16-10-22, 06:35 PM)Taha Okla كتب : القيم غير موجودة أساساً كما تفضلت - ولكن عند الربط بينها سيقوم كود الـ SQL على تكرار تلك القيم (إعتماداً على مطابقات رياضية كنوع يشبه التراتيب والتوافيق) لكي لا يصبح في الجدول الجديد حقول من الجدول الأول لا يطابقها حقول من الجدول الثاني (وهذا هو سبب الخطأ الذي حدث معك في نواتج عملية الجمع).
تحليل استفدت منه
(16-10-22, 06:35 PM)Taha Okla كتب : الكود الذي طرحه الأخ (Meen2) ليس بالكود القياسي حتى الآن (من وجهة نظري- ربما غير له وجهة نظر أخرى) فـ بالرغم من تطابق الحلول حالياً لكن أظن أنه سينشأ عن ذلك أخطاء في المستقبل لسبب أجهله.
فعلا الحل الذي قدمته انا ليس بالكود القياسي لأنني كنت أسير بطريقة صاحب السؤال
(16-10-22, 06:35 PM)Taha Okla كتب : أظن أن الحل هو : أن يتم عمل جدول (جدول إفتراضي عن طريق الكود) جديد ناتج عن الجدول الأول بواسطة الوظيفة (Group By) ليمنع تكرر القيم بل ليجمعها للحقل (Product_S_N) أي (جدول جديد عن كل جدول من الجدولين السابقين ).
ومن هاذين الجدولين الجديدين يقوم بتطبيق خاصية (INNER JOIN) مع خاصية الجمع للحقيلن المطلوبين فتحصل على الهدف،،
الحل الأفضل المقدم من الأستاذ طه
كود :
CREATE TABLE #ReceivedTable (SN INT, Qty INT)
CREATE TABLE #OutgoingTable (SN INT, Total INT)
INSERT INTO #ReceivedTable
SELECT Product_S_N AS SN,
Quantity AS Qty
FROM TBL_Products_Received_Details
INSERT INTO #OutgoingTable
SELECT Product_S_N AS SN,
SUM(Quantity) AS Total
FROM TBL_Outgoing_Products_Details
GROUP BY Product_S_N
SELECT #ReceivedTable.SN AS 'Product SN',
#ReceivedTable.Qty AS 'Total Received',
#OutgoingTable.Total AS 'Total Outgoing'
FROM #ReceivedTable
INNER JOIN #OutgoingTable
ON #OutgoingTable.SN = #ReceivedTable.SN
أو
كود :
CREATE TABLE #OutgoingTable (SN INT, Total INT)
INSERT INTO #OutgoingTable
SELECT Product_S_N AS SN,
SUM(Quantity) AS Total
FROM TBL_Outgoing_Products_Details
GROUP BY Product_S_N
SELECT TBL_Products_Received_Details.Product_S_N AS 'Product SN',
TBL_Products_Received_Details.Quantity AS 'Total Received',
#OutgoingTable.Total AS 'Total Outgoing'
FROM #OutgoingTable
INNER JOIN TBL_Products_Received_Details
ON TBL_Products_Received_Details.Product_S_N = #OutgoingTable.SN
المشاركات : 186
المواضيع 33
الإنتساب : Dec 2018
السمعة :
1
الشكر: 187
تم شكره 152 مرات في 106 مشاركات
17-10-22, 12:59 PM
(آخر تعديل لهذه المشاركة : 17-10-22, 01:00 PM {2} بواسطة maxruined.)
(16-10-22, 06:35 PM)Taha Okla كتب : (16-10-22, 12:56 PM)maxruined كتب : (16-10-22, 12:16 PM)Meen2 كتب : إقتباس :تستخدم العبارة DISTINCT للحصول على قيمٍ فريدةٍ غير مكررة، وغالبًا ما تستخدم في استعلام SELECT للحصول على سجلات لا تتكرر القيم فيما بينها، إذ يصبح الاستعلام بالشكل الآتي:
حقيقي اخوي شكراً جداً علي مساعدتك
ولكن سؤال اخير انا المفروض معنديش اي قيم متطابقه علشان استخدم هذا الامر ولكن الحقيقه هو اشتغل تمام ولكن مش فاهم ليه ؟؟ !!
فين السجلات المتطابقه اصلا عندي !!!؟؟؟
حقيقي مش فاهم كويس ايه اللي بيحصل
القيم غير موجودة أساساً كما تفضلت - ولكن عند الربط بينها سيقوم كود الـ SQL على تكرار تلك القيم (إعتماداً على مطابقات رياضية كنوع يشبه التراتيب والتوافيق) لكي لا يصبح في الجدول الجديد حقول من الجدول الأول لا يطابقها حقول من الجدول الثاني (وهذا هو سبب الخطأ الذي حدث معك في نواتج عملية الجمع).
ومع ذلك حتى الكود الذي طرحه الأخ (Meen2) ليس بالكود القياسي حتى الآن (من وجهة نظري- ربما غير له وجهة نظر أخرى) فـ بالرغم من تطابق الحلول حالياً لكن أظن أنه سينشأ عن ذلك أخطاء في المستقبل لسبب أجهله.
أظن أن الحل هو : أن يتم عمل جدول (جدول إفتراضي عن طريق الكود) جديد ناتج عن الجدول الأول بواسطة الوظيفة (Group By) ليمنع تكرر القيم بل ليجمعها للحقل (Product_S_N) أي (جدول جديد عن كل جدول من الجدولين السابقين ).
ومن هاذين الجدولين الجديدين يقوم بتطبيق خاصية (INNER JOIN) مع خاصية الجمع للحقيلن المطلوبين فتحصل على الهدف،،
كنت أود أن أقدم هذا الحل، لكن للأسف ليس على أي جهاز من أجهزتي، برنامج الـ SQL ولا أرغب بتنزيله حالياً..
وصعب علي التخيل بدون تجريب (فلست بالمحترف أو المتخصص في هذا المجال، ولكن يبقى عندي حدس يرشدني للحل الأصح والأسلم).
أما سبب عدم تعاملي مع قواعد الـ SQL : (من وجهة نظري) لا أظن أن هناك داعي له ما دام قواعد الـ Ms.Access تفي بالغرض لكل البرامج التي أتعامل بها حتى الآن، فهي تعطيني أكثر مما أطلبه منها وزيادة على بساطة الاستخدام و والاتصال والوصول والآمان الغير موجود في الـ قواعد الـ SQL.، قواعد الـ MS.Access عن تجربة تستوعب بيانات حتى 2G بدون مشاكل وسريعة الاستجابة. وكـ برامج حسابية أتعامل بها لا تستلزم أصلاً ربع هذا الحجم فلما أعقد برامجي وأثقل أجهزتي ببرامج لا داعي لها..
قواعد الـ SQL تبدو الضرورة لها في برامج الأرشيف كـ برامج العلاقات العامة والمواقع المنتديات وليس برامج الحسابات(في الشبكات الداخلية).
شكراً جدا اخوي طه علي المعلومات القيمه وعلي مساعدتك حقيقي استفدنا منك كتير
بارك الله فيك
(17-10-22, 10:37 AM)Meen2 كتب : ما شاء الله أستاذ طه
(16-10-22, 06:35 PM)Taha Okla كتب : القيم غير موجودة أساساً كما تفضلت - ولكن عند الربط بينها سيقوم كود الـ SQL على تكرار تلك القيم (إعتماداً على مطابقات رياضية كنوع يشبه التراتيب والتوافيق) لكي لا يصبح في الجدول الجديد حقول من الجدول الأول لا يطابقها حقول من الجدول الثاني (وهذا هو سبب الخطأ الذي حدث معك في نواتج عملية الجمع).
تحليل استفدت منه
(16-10-22, 06:35 PM)Taha Okla كتب : الكود الذي طرحه الأخ (Meen2) ليس بالكود القياسي حتى الآن (من وجهة نظري- ربما غير له وجهة نظر أخرى) فـ بالرغم من تطابق الحلول حالياً لكن أظن أنه سينشأ عن ذلك أخطاء في المستقبل لسبب أجهله.
فعلا الحل الذي قدمته انا ليس بالكود القياسي لأنني كنت أسير بطريقة صاحب السؤال
(16-10-22, 06:35 PM)Taha Okla كتب : أظن أن الحل هو : أن يتم عمل جدول (جدول إفتراضي عن طريق الكود) جديد ناتج عن الجدول الأول بواسطة الوظيفة (Group By) ليمنع تكرر القيم بل ليجمعها للحقل (Product_S_N) أي (جدول جديد عن كل جدول من الجدولين السابقين ).
ومن هاذين الجدولين الجديدين يقوم بتطبيق خاصية (INNER JOIN) مع خاصية الجمع للحقيلن المطلوبين فتحصل على الهدف،،
الحل الأفضل المقدم من الأستاذ طه
كود :
CREATE TABLE #ReceivedTable (SN INT, Qty INT)
CREATE TABLE #OutgoingTable (SN INT, Total INT)
INSERT INTO #ReceivedTable
SELECT Product_S_N AS SN,
Quantity AS Qty
FROM TBL_Products_Received_Details
INSERT INTO #OutgoingTable
SELECT Product_S_N AS SN,
SUM(Quantity) AS Total
FROM TBL_Outgoing_Products_Details
GROUP BY Product_S_N
SELECT #ReceivedTable.SN AS 'Product SN',
#ReceivedTable.Qty AS 'Total Received',
#OutgoingTable.Total AS 'Total Outgoing'
FROM #ReceivedTable
INNER JOIN #OutgoingTable
ON #OutgoingTable.SN = #ReceivedTable.SN
أو
كود :
CREATE TABLE #OutgoingTable (SN INT, Total INT)
INSERT INTO #OutgoingTable
SELECT Product_S_N AS SN,
SUM(Quantity) AS Total
FROM TBL_Outgoing_Products_Details
GROUP BY Product_S_N
SELECT TBL_Products_Received_Details.Product_S_N AS 'Product SN',
TBL_Products_Received_Details.Quantity AS 'Total Received',
#OutgoingTable.Total AS 'Total Outgoing'
FROM #OutgoingTable
INNER JOIN TBL_Products_Received_Details
ON TBL_Products_Received_Details.Product_S_N = #OutgoingTable.SN
شكراً جداً جداً اخوي Meen2 علي مساعدتك ليا
حقيقي انا استفدت منكم جميعاً انت واخوي طه
بارك الله فيكم
|