الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حيرني هذا اللغز : جرد قيم الصنف الواحد في جميع الشهور ؟

بدأه vbzaidan في 26 يوليو 2008 · 6 رد · 1,051 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

أقوم حاليا بعمل برنامج متصل بقاعد البيانات sql server 2005

المشكلة : أريد أن أعمل stored procedure من الـ sql server 2005 أو من السي شارب ( Front end ) ?

أدخلت مشتروات في قاعدة البيانات طوال السنة والآن أريد أجرد هذه المشتروات على هذا النحو :

الصنف _____ مجموع قيمة الصنف في شهر محرم _____ مجموع قيمة الصنف في شهر صفر _____ وهكذا مع بقية الشهور

أكلات خارجية

نصف الحل : إستطعت أن أقوم بالجرد لشهر واحد فقط هذا الإستعلام لشهر واحد فقط :

select main_item , sum(cost) from entry where datepart(mm,daydate)='1' group by main_item

ملاحظة :

entry = إسم الجدول

main_item = المصاريف المدخلة عمود

cost = عامود قيمة الصنف أو التكلفة

daydate = عامود به تاريخ شراء الصنف

----------------------------------------------------------------------------------- السؤال -----------------------------------------------------------------------------------------

من الإيضاح المبين أعلاه كيف أقوم بالجرد لجميع الشهور أو الشهور التي أختارها فقط ؟

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

لكم مني جزيل الشكر ... وأسف على الإطالة ..

زيدان

تم تعديل هذه المشاركة بواسطة vbzaidan في 26 يوليو 2008 في 23:48

#2

هناك معامل في قواعد البيانات اسمع ROLLUP ياتي مع قواعد البيانات التي تستخدم الsql

انا اعرف استخدامه في اوراكل ويقوم بتجميع جميع القيم حسب قيمة واحدة ثم ينتقل الى قيمة اخرى وهكذا

يعني اعتقد ان الخاصية تجعل استعلامك بالطريقة هاذي

select main_item , sum(cost)

from entry

group by

(mm,daydate) with rollup

جرب واخبرني لانه صاير لي كثير بعيد عن اجواء قواعد البيانات

#3

أشكر لك تعاونك معي في حل هذه المعضلة ...

لم يتغير شيء بعد إضافتك الكريمة حاولت مرار وبحثت عن هذا الأمر with rollup لكن المشكلة ما زالت قائمة ..

- هل يجب عمل حلقة تكرارية ؟

- هل أستخدم subquery ؟

- هل من إقتراحات أخرى ؟

لتقريب الصورة أكثر بلاش الشهور :

فرضا أني أريد عرض مجموع المصاريف لكل صنف في سنة 2008 في عامود و 2007 في عامود وعامود 2006 كيف ؟

الصنف ــــ سنة 2008 ــــ ـــ سنة 2007 ـــ ـــ سنة 2008 ـــ

أشكرك مرة أخرى Mohamed-Riadh

#4

السلام عليكم

مفتاح الحل هو في PIVOT أذا اردت ان تبحث عنها

والحل كما يلي

with tempEntry 
as (
select main_item  ,cost  , month ( daydate ) as Emonth  
from [entry] where year(daydate) = 2008
)

SELECT  * 
FROM tempEntry PIVOT

(

sum(cost) FOR Emonth IN ([1] , [2], [3] , [4]......[12] ) ) AS p

واذا اردت حسب السنة فقط غير month ( daydate ) الى year(mydate)

#5

لو لسه المشكلة قائمة

حاول تستخدم compute by

#6

********************************************************* الحمد لله ********************************************************************************

* بارك الله فيك أخي TareqVB والمفتاح اللي أضفته مشكورا فك العقدة 100 % سلمت يداك .

* يعلم الله لي يومين وأنا أبحث في المنتديات الأجنبية الكل يجزم بأن ليس هناك حل إلا إستخدم :

- إستخدم datareader.NextResult لكي ترجع أكثر من إستعلام select ( وهذا الحل أيضا لم يحل المشكلة )

(( وفوق كل ذي علم عليم ))

تم تعديل هذه المشاركة بواسطة vbzaidan في 28 يوليو 2008 في 07:01

#7

بالنسبة للمشكلة الأولى إنحلت بفضل الله ثم بالكود الذي أرفقته في ردك الأخير للموضوع .

لكن لم أتنبه لمشكلة أخرى هي أيضا من ضمن متطلبات المشروع ولها علاقة بالمشكلة الأولى وبدون حل الأولى لم توجد الثانية ...

المشكلة الثاني والتي يبدو لي أنها أصعب من الأولى .................. شكلنا كذا ما نخلص من المشروع دا أبدااااا

طيب ياسيدي شوف المشكلة الثانية :

قاعدة البيانات بشكل موجز هناك الكثير من الجدوال لكن هنا أتطرق فقط لقسم معين ( ليس لها علاقة بالإقسام الأخرى ) :

table entry :

main_item = الصنف الرئيسي

sub_item = الصنف الفرعي ( تحت كل صنف واحد رئيسي يوجد واحد أو أكثر صنف فرعي )

cost = التكلفة ( طبعا هنا التكلفة تكون للصنف الفرعي الصنف الرئيسي ماهو إلا إسم فقط لتميز إسم المجموعة )

daydate = تاريخ شراء الصنف

id = ( يعني ممكن تقول فاتورة ما تم شرائه ) PK

-------------------------------

items_table :

sub_name

main_name FK

----------------------------

main table

main_name PK

------------------------------

** توضيح تصويري **

في المرة السابقة عندما أعرض مجموع البيانات في كل شهر فقط الصنف الرئيسي ( فقط ) ( وهو مجموع المصاريف جميع الأصناف الفرعية تحته ) هو الذي يعرض في عمود main_item

2007 _______________ 2008 ________________main_name

السيارة

أجهزة كومبيرتر

(بترول)

(شاشة كومبيوتر)

الآن لاحظ معي الأصناف التي بين الأقواس هي أصناف فرعية بغض النظر عن وجود الصنف الرئيسي في المجموعة لأن الصنف الرئيسي سيقوم بجمع ( الزيت + البترول + صيانة + ... ) لكن في نفس الوقت أريد أن

أن أعرف فقط مصاريف البترول في الشهر

** محاولاتي **

1- إستخدام الأمر union لضم النتائج الخاصة بالأصناف الرئيسية مع نتائج الخاصة بالأصناف الفرعية لكن إتضح إنو الـ union رفض يمشيها لأن القيم في كل نتيجة تختلف عن الأخرى يجب أن تكون القيم متساوية

سأقوم بالبحث وأقوم بمحاولات أخرى علي أجد حل ..

أتمنى من الجميع الإشارة بأي شيء فكرة , نصف حل , أمر , رابط لموقع عربي أو أجنبي لموقع به صلة بالموضوع ...

تحياتي لكم جميع

في إنتظار أرائكم النيرة ...

إعذورني على ألإطالة يا إخوان ..

أخوكم المحب

زيدان

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…