إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

لغز محير لخبراء Sql


6 رد (ردود) على هذا الموضوع

#1 mageed_ahmed

mageed_ahmed

    مشرف قسم الـ DBA

  • فريق الإشراف
  • 956 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:.

تاريخ المشاركة 30 October 2007 - 10:00 PM

السلام عليكم ورحمة الله وبركاته
برجاء التكرم بقراءة المعطيات التالية والمساعدة في اعطاء الناتج من خلال
sql statement or pl code

SQL> select emp_code,to_char(dated,'dd/mm/yyyy') dated,inout from ATD
2 order by emp_code,dated,INOUT;

EMP_ DATED INOUT
---- ---------- --------
0085 20/10/2007 08:09:27
0085 20/10/2007 12:58:30
0085 20/10/2007 14:08:32
0085 20/10/2007 18:00:04
0085 21/10/2007 08:10:02
0085 21/10/2007 12:56:53
0085 21/10/2007 14:07:38
0085 21/10/2007 18:44:44
0085 22/10/2007 08:12:34
0085 22/10/2007 13:11:57
0085 22/10/2007 14:08:33
0085 22/10/2007 18:11:58
0086 23/10/2007 08:12:00
0086 23/10/2007 13:00:05
0086 23/10/2007 14:05:48
0086 23/10/2007 18:04:42
0086 24/10/2007 08:13:35
0086 24/10/2007 13:06:17
0086 24/10/2007 14:11:06

20 rows selected.

the required is to make a select statement which results the following

EMP_code DATED INOUT1 INOUT2 INOUT3 INOUT4
0085 20/10/2007 08:09:27 12:58:30 14:08:32 18:00:04
0085 21/10/2007 08:10:02 12:56:53 14:07:38 18:44:44
AND SO ON TO SHOW DAY ONE TIME WITH THE 4 TIMES FOR EVERY EMPLOYEE

YOU are allowd to give any solution to get the result

FOR MORE INFORMATION

CREATE TABLE ATD(EMP_CODE VARCHAR2(4),DATED DATE,INOUT DATE);
THEN INSERT THESE VALUES INSIDE THIS TABLE LIKE

INSERT INTO ATD VALUES ('0085' ,TO_DATE('20/10/2007','DD/MM/YYYY'),TO_DATE('08:09:27','HH24:MI:SS'));
INSERT INTO ATD VALUES ('0085' ,TO_DATE('20/10/2007','DD/MM/YYYY'),TO_DATE('12:58:30','HH24:MI:SS'));
INSERT INTO ATD VALUES ('0085' ,TO_DATE('20/10/2007','DD/MM/YYYY'),TO_DATE('14:08:32','HH24:MI:SS'));
INSERT INTO ATD VALUES ('0085' ,TO_DATE('20/10/2007','DD/MM/YYYY'),TO_DATE('18:00:04','HH24:MI:SS'));
AND SO ON FOR INSERTING THE ABOVE DATA

THEN YOU CAN USE the following to display date and time as I listed before

SQL> select emp_code,to_char(dated,'dd/mm/yyyy') dated,inout from ATD
2 order by emp_code,dated,INOUT;

I hope you reply it.

to get this data in text file please download the attached file

ملفات مرفقة


تم التعديل بواسطة mageed_ahmed, 30 October 2007 - 10:04 PM.

("واتقوا يوما ترجعون فيه الي اللــــــه")

#2 nhamzehn

nhamzehn

    مشترك

  • الأعضــاء
  • 187 مشاركة
  • الاهتمامات:المطالعة

تاريخ المشاركة 31 October 2007 - 10:24 AM

الحل كالتالي باستخدام NESTED CURSOR
DECLARE
  INOUT_TEMP VARCHAR2(80) :='';
  CURSOR C1 IS
	SELECT DISTINCT EMP_CODE, TO_CHAR(DATED, 'DD/MM/YYYY') DATED
	  FROM ATD
	 ORDER BY 1, 2;

  CURSOR C2(E_CODE IN VARCHAR2, DAT VARCHAR2) IS
	SELECT TO_CHAR(INOUT, 'HH24:MI:SS') INOUT
	  FROM ATD
	 WHERE EMP_CODE = E_CODE
	   AND TO_CHAR(DATED,'DD/MM/YYYY') = DAT
	 ORDER BY 1;
BEGIN
  FOR I IN C1 LOOP
	FOR J IN C2(I.EMP_CODE , I.DATED) LOOP
	  INOUT_TEMP := INOUT_TEMP||' '||J.INOUT;
	END LOOP;
	DBMS_OUTPUT.PUT_LINE(I.EMP_CODE||' '||I.DATED||INOUT_TEMP);
	INOUT_TEMP := '';
  END LOOP;
END;

اتمنى ان يكون المطلوب وما توفيقي الا بالله
سبحان الله وبحمده سبحان الله العظيم

اللهم لك الحمد والشكر كما ينبغي لجلال وجهك وعظيم سلطانك

#3 mageed_ahmed

mageed_ahmed

    مشرف قسم الـ DBA

  • فريق الإشراف
  • 956 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:.

تاريخ المشاركة 31 October 2007 - 04:14 PM

جزاكم الله خيرا الجزاء وبارك فيك وجعله في ميزان حسانتك

الفكرة واضح أنها صحيحة وشيقة جدا وعلي أي حال جاري التجربة

بارك الله فيك وأصلح حالك
("واتقوا يوما ترجعون فيه الي اللــــــه")

#4 جلال شواقفه

جلال شواقفه

    عضو مميز

  • الأعضــاء
  • 2,559 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 31 October 2007 - 06:36 PM

شكرا على المعلومه المميزه ساقوم بحفظها في ملف
الارشيف الخاص بي
بارك الله بيكم
ارجو من يستفيد من مشاركاتي الدعاء لوالدي ولاموات المسلمين بالمغفره والرحمه......

جلال محمود شواقفه
مدير دائرة الحاسوب
بلدية المفرق الكبرى
المملكه الاردنيه الهاشميه.

#5 mageed_ahmed

mageed_ahmed

    مشرف قسم الـ DBA

  • فريق الإشراف
  • 956 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:.

تاريخ المشاركة 01 November 2007 - 11:44 AM

أخي الفاضل
بالنظر الي
EMP_ DATED INOUT
---- --------- --------
0992 20-OCT-07 17:31:34
0992 20-OCT-07 08:06:38
0992 21-OCT-07 08:02:36
0992 21-OCT-07 17:29:55
0992 22-OCT-07 07:54:28
0992 22-OCT-07 17:30:41
0992 23-OCT-07 07:59:09
0992 23-OCT-07 17:30:35


حينما يصل الكود الي الصف الاخير 0992 24-OCT-07 07:58:29 للموظف 0992 فانه يعطي ORA-6502
("واتقوا يوما ترجعون فيه الي اللــــــه")

#6 mageed_ahmed

mageed_ahmed

    مشرف قسم الـ DBA

  • فريق الإشراف
  • 956 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:.

تاريخ المشاركة 01 November 2007 - 12:17 PM

بمعني اذا كان INOUT ظاهر مرة واحدة كأن كان حضور الموظف مرة واحدة في اليوم يعطي رسالة الخطأ يعني الكود الذي تفضلت به يحتاج INOUT مدخلين للموظف في يوم واحد
("واتقوا يوما ترجعون فيه الي اللــــــه")

#7 mageed_ahmed

mageed_ahmed

    مشرف قسم الـ DBA

  • فريق الإشراف
  • 956 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:.

تاريخ المشاركة 01 November 2007 - 01:54 PM

جزاكم الله خيرا
تم حل المشكلة والحمد لله
("واتقوا يوما ترجعون فيه الي اللــــــه")