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

استعلام بشكل مختلف لعرض تواريخ أيام الشهر كأعمده

بدأه السكر المغرور في 16 يناير 2014 · 13 رد · 791 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كيف الحال  اخواني  المبرمجين  ،،  كان لي سؤال من قبل في هذا القسم  و لم يتم الاجابه  عنه  

لذلك اتمنى  اجابة هذا السؤال الثاني ::

 

بافتراض ان  لدينا  جدول يسمى جدول المواعيد للمرضى ، يحفظ فيه  

1) ID  

2) اسم المريض

3) تاريخ يوم الموعد  

4) وقت الموعد

 

جيد الأن  اريد  الاستعلام  من اول يوم في الشهر  الى  اخر  يوم  بالشهر  مثلا  

و السجلات  تبدأ  من الساعه  مثلا  8 صباحا  الى  الساعه  مثلا  2 عصرا  

 

و تظهر النتيجه كالتالي  ::  كما بالمرفق  ::

 

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

 

علما  بان  بامكاني  عملها  برمجيا في  بيئة البرمجه  كما  الجدول  الذي بالصورة  و لكنه  غير  عملي بتاتا  و بطيء في التنفيذ 

 

لذلك أتمنى  من  الاعضاء فهمي فانا لا اريد وضع حلول مؤقته  أريد اجابه شافيه  لاستفيد و يستفيد غيري  

 

 

post-140164-0-65462500-1389897321_thumb.

تم تعديل هذه المشاركة بواسطة السكر المغرور في 16 يناير 2014 في 21:36

#2

لاحظوا  هذا المثال في  هذا الموقع  فهو  الى  حد  ما  مقبول  و لكنه  استخدم في  هذه الحالة  SUM  بعد  كلمة  pivot    و لكن  هنا  لا  يوجد  جمع فهل  ستنجح  نفس الطريقة  علما باني  وجدت  الحل قبل قليل  و لم  اجربه  لانه لا  يوجد  SQL server  بالجهاز الحالي الذي اكتب منه  الرد 

 

http://www.codeproject.com/Tips/500811/Simple-Way-To-Use-Pivot-In-SQL-Query

تم تعديل هذه المشاركة بواسطة السكر المغرور في 16 يناير 2014 في 21:50

#3

في المثال المرفق اسماء الاعمده غير معلومة اما الموقع فاسماء الشهور معروفة

SUM لا تنفع مع النص اي الاسماء اعتقد انMIN افضل

تم تعديل هذه المشاركة بواسطة KARIMSOFT في 16 يناير 2014 في 22:46

#4
KARIMSOFT كتب:

في المثال المرفق اسماء الاعمده غير معلومة اما الموقع فاسماء الشهور معروفة

SUM لا تنفع مع النص اي الاسماء اعتقد انMIN افضل

إذا كانت أسماء الأعمدة غير معلومة , نقوم بإيجادها بشكل ديناميكي و تنفيذ الاستعلام الناتج .. كما في الرابط :

http://stackoverflow.com/a/14618676/992406

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

أخواني  بعض النظر  ديناميكي  او  ستاتيك  سؤالي  هو  كالتالي  :

 

 

لدي التاريخين التاليين  : 

 

06/05/2013

07/05/2013

 

اوجد  مواعيد  الساعات  

 

9:00

10:00

11:00 

 

 

طبعا بدون  استخدام  SUM + count + Max  + min   لاني  اريد  اسماء  مرضى فكيف  ستجمعها   :(

 

ساعدوني في  حل  هذي  المعضله  و ستكفيني  الاجابه  

تم تعديل هذه المشاركة بواسطة السكر المغرور في 17 يناير 2014 في 00:00

#6

السلام عليكم ...

طالما انه من أجل تاريخ واحد و وقت واحد لدينا مريض واحد أو دون مريض , فيمكن استخدام دوال التجميع MIN  , MAX  التي ستعيد لنا قيمة واحدة  ...أو NULL  ..

SELECT *
FROM (
    SELECT [AppointTime] , [PName] ,  [AppointDate]
    FROM Paitent
) as s
PIVOT
(
    Max([PName])
    FOR [AppointDate] IN ( [06/05/2013] , [07/05/2013] )
)AS pvt;

 و اعتقد انه يمكن  بهذه الطريقة :

select [AppointTime],
 MAX (case when [AppointDate] = '06/05/2013' then [PName] else NULL end) AS  _06_05_2013,
 MAX(case when [AppointDate] = '07/05/2013' then [PName] else NULL end) AS  _07_05_2013
  
from Paitent 
group by [AppointTime] , [PName]
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#7

 يعطيك العافيه  و الله يبارك فيك  و يزيد  من  علمك  و  الله  انك  انسان  تحفه  بمعنى الكلمه لانك اعطيتني  جواب  شافي  و  كافي  و جعلتني  افهم  الطريقه  بارك الله فيك و في علمك تستحق بوووسه على الراس ،،  

اخي  العزيز فقط  نقطه  اخرى  ان  قدرت  تسويها  اكون  شاكر  لك  أكثر  و اكثر  و إن  كانت صعب تنفيذها فلا باس فقط قطعت  لي  شوط  كبير  بالاستعلامات  التي  بالاعلى  و الباقي  ساقوم  ببرمجته  عن طريق  C#  لمعالجة اظهاره 

 

انظر الى الصورة  المرفقه  و  منتظر  ردك  اخي  الفاضل  

SELECT *FROM (    SELECT [Appoint_Time] , [Appoint_PatientID] ,  [Appoint_Date]    FROM [dbo].[AppointmentTable]) as PIVOT(    Max([Appoint_PatientID])    FOR [Appoint_Date] IN ( [2014-01-11] , [2014-01-12]      , [2014-01-13] , [2014-01-14] , [2014-01-15]))AS pvt;

post-140164-0-45937900-1389909808_thumb.

تم تعديل هذه المشاركة بواسطة السكر المغرور في 17 يناير 2014 في 01:07

#8

السلام عليكم ..

بارك الله بك أخي ....

نضع الأوقات المطلوبة في متحول من نوع جدول ...TimeTable  (في سيكوال سيرفر هذا ممكن) . (يمكنك إنشاؤه في القاعدة لو أردت كجدول عادي , و تضع فيه قيم الوقت المطلوبة ).

ناتج الاستعلام السابق (أقصد الــ PIVOT) نضعه في جدول اسمه TT  مثلا ..

نحن نريد كل سجلات TimeTable  ان تظهر و إذا كان لها مقابل في TT  أن يضعه و إلا يضع NULL  و هذا هو تعريف  اللـــ Left Outer Join  ..

DECLARE @TimeTable TABLE
(
myTime Time(0)
);

INSERT INTO @TimeTable VALUES 
('08:00') ,('08:30') , ('09:00') ,('09:30') , 
('10:00') ,('10:30') , ('11:00') ,('11:30') 


SELECT * FROM @TimeTable AS TimeTable LEFT OUTER JOIN
(
SELECT *
FROM (
    SELECT [Appoint_Time] , [Appoint_PatientID] ,  [Appoint_Date]
    FROM AppointmentTable
) as s
PIVOT
(
    Max([Appoint_PatientID])
    FOR [Appoint_Date] IN ( [06/05/2013] , [07/05/2013] )
)AS pvt) AS TT ON TimeTable.myTime = TT.Appoint_Time ;

 ملاحظة : في السجل الأول لديك قيمة ثواني 08:30:29  .. طبعا حاول معالجتها من الإدخال ... كي لا تسبب مشاكل ..

أرجو أن يكون هذا هو المطلوب ..

تم تعديل هذه المشاركة بواسطة حسام الشامي في 17 يناير 2014 في 01:57

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#9

بلى هذا  هو  المطلوووووب  كفيت  ووفيت  و جزاك الله  خيراً  تصدق لي  ثلاثه  ايام  ابحث  و عندي  فكره  عن  TableType   قريت  عنها  كذا  مره  لاني  احتجتها  في بعض  البروسيجرات  من  اجل  ادراج  عدة  سجلات  من  واجهة  برنامج  الى  قاعدة البيانات  دفعه  واحد  بحيث  لا  يتم ادراجها على سجل  سجل لانها  تعتبر  عملية  عقيمه  في الادراج    ^_^ 

 

على  العموم  اذا  احد اراد  الكود يراسلني  و سوف  اقوم بتزويده   ،،  

 

بالنسبه  للحقل  الذي  فيه قيمة ثواني 08:30:29 عباره  عن  أول تجربه  لي  للكود  و قد  تم  تصحيح  الكود   :) 

 

و هذا التطبيق  للاستعلامات  كصورة في المرفقات و هي  ظاهره  100 %   :rolleyes: 

 

ملاحظه  :  ما شاء الله  عليك  اخي  في  عملية  الاستعلام  و  التحكم  في  قواعد  البيانات  هل  اتبعت  كورس  معين  في  التعلم  او  انها  تراكم  خبرات  لسنوات  طويله  لاني  اعاني  كثير  لما  اصمم  برنامج  و اضطر اني  استعلم  بطريقه  اعتياديه  كمبتدأ  في قواعد البيانات  و  اعالجها  بداخل  البرنامج  و  هذي  جريمه  برمجيه لانها تبطأ عمل الأكواد  ..  لذلك  أخي  الفاضل  بماذا  تنصحني  أن  أتبع  من  دروس  ،،  و شاكر  لك  وقتك  بمساعدتي   ،،  و كثر الله  خيرك  و  رزقك الفردوس الأعلى بالجنه  

 

 

post-140164-0-20720500-1389914930_thumb.

#10
اقتباس

ملاحظه  :  ما شاء الله  عليك  اخي  في  عملية  الاستعلام  و  التحكم  في  قواعد  البيانات  هل  اتبعت  كورس  معين  في  التعلم  او  انها  تراكم  خبرات  لسنوات  طويله  لاني  اعاني  كثير  لما  اصمم  برنامج  و اضطر اني  استعلم  بطريقه  اعتياديه  كمبتدأ  في قواعد البيانات  و  اعالجها  بداخل  البرنامج  و  هذي  جريمه  برمجيه لانها تبطأ عمل الأكواد  ..  لذلك  أخي  الفاضل  بماذا  تنصحني  أن  أتبع  من  دروس  ،،  و شاكر  لك  وقتك  بمساعدتي   ،،  و كثر الله  خيرك  و  رزقك الفردوس الأعلى بالجنه

 

 

بارك الله بك أخي ... و رزقك الله الجنة و جميع المسلمين .. آمين ..

معالجة البيانات داخل البرنامج ليس دائما سئ أو ليس بالسوء الذي تظن ...

لم اتبع كورس معين .. بل تراكم خبرة عملية  ... مع قراءة من هنا و هناك ...

عليك بالقراءة المستمرة ...  المصادر كثيرة .. قم بتلخيص الأمثلة التي تصادفها و فهرسها في دفتر خارجي أو ملف .. اكتب ملاحظاتك عليها .. حاول فهم "ما وراء الاكواد" .. يعني هذا الكود أو الاستعلام .. ماذا يعمل بالضبط .. كيف يعمل ..

شغّل مخيلتك .. حاول تخيل البيانات الموجودة و البيانات المطلوب أظهارها و حلل كيف سنحصل على النتائج اعتمادا على البيانات الموجودة ..

ركز على الاساسيات كثيرا .. ثم انتقل إلى  الــ Join  , Stored Procedure و الــ Sub query  و الــ trigger  و الــ Dynamic SQL  و الــ Cursors  و الــ Table Type  و الــ Temp Table  ..الخ

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

الأمثلة الكثيرة مفيدة ....

حاول قراءة الاسئلة  في موقع Stackoverflow  مثلا :

http://stackoverflow.com/questions/tagged/sql-server

http://stackoverflow.com/questions/tagged/tsql

http://stackoverflow.com/questions/tagged/sql

اقرأ كتب عربي و إنكليزي :

http://kutub.info/library/category/15

تعلم كيف تتعلم البرمجة وتصل إلى الاحتراف

عليك بالصبر و المثابرة ...

بالتوفيق .

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#11

يا اخي حسام كان تعليقي مجرد معلومه في الظلام حتي يبحث عن بقيتها الاخ صاحب السؤال واثق فد قدراتك

لا كن تمنيت ان لايجد الحل جاهز ويحاول البحث نه وعلي العموم كنت اعرف الحل و دفع الناس للبحث والمعرفة

 

شكرا لك اخي حسام فانا تلميذك اكرمك الله

#12
KARIMSOFT كتب:

يا اخي حسام كان تعليقي مجرد معلومه في الظلام حتي يبحث عن بقيتها الاخ صاحب السؤال واثق فد قدراتك

لا كن تمنيت ان لايجد الحل جاهز ويحاول البحث نه وعلي العموم كنت اعرف الحل و دفع الناس للبحث والمعرفة

 

شكرا لك اخي حسام فانا تلميذك اكرمك الله

بارك الله بك اخي كريم ... فيك البركة ... :)

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#13
اقتباس

يا اخي حسام كان تعليقي مجرد معلومه في الظلام حتي يبحث عن بقيتها الاخ صاحب السؤال واثق فد قدراتك

لا كن تمنيت ان لايجد الحل جاهز ويحاول البحث نه وعلي العموم كنت اعرف الحل و دفع الناس للبحث والمعرفة

 

شكرا لك اخي حسام فانا تلميذك اكرمك الله

 

 

 

 

أخي الغالي  كريم  ،،  شكرا  لتلميحاتك  و مقدر لك  بكل ما اوتيت من قوه ، لكن  ليس  كل شيء يأتي بالتلميح  أنا باحث  ولو تلاحظ  اني مسجل  في المنتدى  من  سنة  2007   و لم أضع أسئلة  الا 3 أسئله معدوده  لشيئين

1) اني  أبحث  عن  الاجابه  بالمنتديات قبل وضع السؤال  و دائما اجد الاجابه  الشافيه  

2) اني ابحث بالمنتديات  الأجنبيه  قبل العربيه  لشمول  مصادرها  

 

فعندما  طرحت  السؤال  هنا  وضعت  أأيضا الاجابه  و  هي  Pivot    و رابط  يدل عليها و  لكني  لم  استطع  استخدامه  لخبرتي  الضعيفه في  تركيبها  و بصفه عامه في  SQL  server

فأقترح  أنك  اذا  اردت  تعليم  شخص  تمده  بمصادر  معينه  يوجد فيها  الحل  لكن  الترميز  عن  بعد  لا  تفيدني  

 

ثانياً  :: لو  تدخل  على  أكبر  مواقع  التعليم  و الأسئله  البرمجيه  الأجنبيه  ستجد  أن  باقي  الاعضاء  يساعدون  بعضهم  باعطائه  كود  كامل  بدون  ترميز  كما  تفعل  

و معك  حق  في  كلمتك  لو  اتيت  و قلت  لك  يا  سيدي الفاضل  اريد  برنامج  كامل  هنا  قل  لي  ان  ابحث  لكني  أسأل  بجزئيه  صغيره  جدا و عامه علما باني حاليا قد قمت بتعديها بما يتناسب معي من أعمده  متغيره  + جلب  اسم المريض بدلا  من  رقمه  .. الخ ،،  و ردي  هذا  ليس  لأجلي في هذه المشاركه  و لكن  جميع  مشاركاتك  في  جميع  المواضيع  الأخرى بنفس  الأسلوب  , أتمنى ألا تزعل  فاني  اذا  رأيت  أجابتك  اتجاوزها  للتي  بعدها  لان  أجابتك  مجرد مفاتيح  لا  تفيد  في  حل  المشكله  ،، لان صاحب الموضوع  و انت  لا  تشترك  بنفس التفكير فاعطني فكرتك و انا اعطيك فكرتي و أختار الافضل  

 

ثالثاً ::  انا لست  مبتدأ بالبرمجه  و اعمل  مع فريق  عمل  و لكن  المسؤول  عن  قواعد البيانات  غير  متواجد معي هذه الفتره  فاضطررت  للبحث  بنفسي  

 

 

بالاخر  ،،  أشكر  الاخ  حسام  و  يعطيك  الف  عافيه  يالغالي  و شكرا  على  الروابط  المفيده  و اهتمامك و  كان  الله  بعونك  و  عون  الجميع  فالعلم  بحار و لا  تستطيع  الالمام  بجميع  الجوانب

 

 

 

تم تعديل هذه المشاركة بواسطة السكر المغرور في 17 يناير 2014 في 22:28

#14

اكرمك الله

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

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

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

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

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