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

إستعلام معقد ارجو مساعدة المحترفين


linda_3loosh

Recommended Posts

السلام عليكم ، لدي الجداول التالية
-جدول الزبائن : CUSTOMERS
-جداول المبيعات : sales_mstr / sales_dtls
-جدول خصومات الزبائن : customers_bu (يتم من خلالة تسديد قيمة المشتريات الآجلة للزبائن)

اريد وضع استعلام تكون حقوله كالتالي :
()1حقل التاريخ ------- (2)حقل خصومات الزبائن --------- (3)حقل المشتريات الآجلة للزبائن
حسب الشروط التالية :
(1) حقل التاريخ : ويتم اختيار كل الايام من جدول sales_mstr وcustomers_bu ، وقد تمت كتابة الكود كالتالي

SELECT DISTINCT BU_DATE A FROM CUSTOMERS_BU WHERE( CUSTOMERS_BU.BU_DATE > = '20-JUN-2007' AND CUSTOMERS_BU.BU_DATE < = '24-JUN-2007' ) 
UNION SELECT DISTINCT S_DATE FROM SALES_MSTR WHERE (SALES_MSTR.S_DATE > = '20-JUN-2007' AND SALES_MSTR.S_DATE < = '24-JUN-2007' );


هنا انتهي الكود
(2) حقل خصومات الزبائن : ويتم تجميع حساب الزبائن لكل تاريخ مقابل له في نفس الصف عندما رقم الزبون يساوي مثلا 25 ، وقد تمت كتابة الكود كالتالي :

SELECT Nvl(SUM(BU_AMOUNT), 0) FROM CUSTOMERS_BU WHERE BU_DATE = '20-JUN-2007' AND C_ID =25 ;


هنا انتهي الكود
واعلم ان الكود به مشكلة تقريبا في حصر التاريخ
(3) حقل المشتريات الآجلة للزبائن - يمكن انشاؤه في حالة نجاح إنشاء الحقل السابق

وعند محاولة إنشاء الإستعلام بدمج الكودين بعباره واحده كالتالي

SELECT(SELECT DISTINCT BU_DATE A FROM CUSTOMERS_BU WHERE( CUSTOMERS_BU.BU_DATE > = '20-JUN-2007' AND CUSTOMERS_BU.BU_DATE < = '24-JUN-2007' ) 
UNION SELECT DISTINCT S_DATE FROM SALES_MSTR WHERE (SALES_MSTR.S_DATE > = '20-JUN-2007' AND SALES_MSTR.S_DATE < = '24-JUN-2007' )),(SELECT Nvl(SUM(BU_AMOUNT), 0) FROM CUSTOMERS_BU WHERE BU_DATE = '20-JUN-2007' AND C_ID =25 ) FROM SALES_MSTR,CUSTOMERS_BU,CUSTOMERS;


هنا إنتهي الكود
فإنه تظهر رسالة الخطاء التالية :
ERROR at line 1:
ORA-01427: single-row subquery returns more than one row
ارجو مساعدتكم في هذا الإستعلام المعقد

رابط هذا التعليق
شارك

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

اختي الكريمة

حسب الجداول التي تم ارفقها سابقا فإن

جدول الزبائن : CUSTOMERS يحتوي علي الحقول التالية

CREATE TABLE "NWARA"."CUSTOMERS"(
"C_ID" NUMBER(9) NOT NULL,
"C_NAME" VARCHAR2(75) NOT NULL,
"C_CREDIT" NUMBER(9) NOT NULL);



حيث العمود c_credit هوعبارة عن الرصيد الحالي للزبون

جداول المبيعات : sales_mstr

CREATE TABLE "NWARA"."SALES_MSTR"(
"S_DATE" DATE NOT NULL,
"S_NO" NUMBER(9) NOT NULL,
"C_NAME" VARCHAR2(75) NOT NULL,
"C_ID" NUMBER(9),
"S_TOTAL" NUMBER(9) NOT NULL,
CONSTRAINT "PK_SALES_MSTR" PRIMARY KEY("S_NO"));



حيث العمود s_total هو عبارة عن المشتريات الاجلة

جدول خصومات الزبائن : customers_bu (يتم من خلالة تسديد قيمة المشتريات الآجلة للزبائن)

غير موجود


حيث العمود BU_AMOUNT هو عبارة عن مجموع الخصومات

حيث من خلال هذه الجداول نريد الوصول إلي

الرصيد الإفتتاحي = (الرصيد الحالي+ مجموع الخصومات) - مجموع المشتريات الآجلة


اذا ماتم كتابته في الاعلي صحيح اذا نحن نحتاج

للوصول إلي مجموع الخصومات خلال السنة المالية الحالية حسب رقم الزبون
كما نحتاج الوصول لمجموع المشتريات الاجلة التي تمت خلال السنة المالية الحالية حسب رقم الزبون

فهل هذا هو المطلوب

جزاكم الله كل خير





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

اختي الكريمة

حسب الجداول التي تم ارفقها سابقا فإن

جدول الزبائن : CUSTOMERS يحتوي علي الحقول التالية

CREATE TABLE "NWARA"."CUSTOMERS"(
"C_ID" NUMBER(9) NOT NULL,
"C_NAME" VARCHAR2(75) NOT NULL,
"C_CREDIT" NUMBER(9) NOT NULL);



حيث العمود c_credit هوعبارة عن الرصيد الحالي للزبون

جداول المبيعات : sales_mstr

CREATE TABLE "NWARA"."SALES_MSTR"(
"S_DATE" DATE NOT NULL,
"S_NO" NUMBER(9) NOT NULL,
"C_NAME" VARCHAR2(75) NOT NULL,
"C_ID" NUMBER(9),
"S_TOTAL" NUMBER(9) NOT NULL,
CONSTRAINT "PK_SALES_MSTR" PRIMARY KEY("S_NO"));



حيث العمود s_total هو عبارة عن المشتريات الاجلة

جدول خصومات الزبائن : customers_bu (يتم من خلالة تسديد قيمة المشتريات الآجلة للزبائن)

غير موجود


حيث العمود BU_AMOUNT هو عبارة عن قيمة الخصومات التي تمت

حيث من خلال هذه الجداول نريد الوصول إلي

الرصيد الإفتتاحي = (الرصيد الحالي+ مجموع الخصومات) - مجموع المشتريات الآجلة


اذا ماتم كتابته في الاعلي صحيح اذا نحن نحتاج

للوصول إلي مجموع الخصومات خلال السنة المالية الحالية حسب رقم الزبون
كما نحتاج الوصول لمجموع المشتريات الاجلة التي تمت خلال السنة المالية الحالية حسب رقم الزبون

فهل هذا هو المطلوب

جزاكم الله كل خير

رابط هذا التعليق
شارك

الجداول اعلاه كما يلي :

-جدول الزبائن : CUSTOMERS


CREATE TABLE "YRMOK"."CUSTOMERS" (
"C_ID" NUMBER(13) NOT NULL, 
   	"C_NAME" VARCHAR2(75) NOT NULL, 
"C_ADRS" VARCHAR2(255) NOT NULL, 
"C_PHONE" NUMBER(15) NOT NULL, 
"C_CREDIT" NUMBER(13) NOT NULL) ; 

-جداول المبيعات : sales_mstr / sales_dtls



CREATE TABLE "YRMOK"."O_SALES_MSTR" (
"S_DATE" DATE NOT NULL, 
"C_NAME"VARCHAR2(75) NOT NULL, 
"S_NO" NUMBER(13) NOT NULL, 
"C_ID" NUMBER(13), 
"S_TOTAL" NUMBER(13) NOT NULL, 
"PAY_MTHD" VARCHAR2(13) NOT NULL, 
CONSTRAINT "PK_O_SALES_MSTR" PRIMARY KEY("S_NO"),
CONSTRAINT PAY_O_SALES_MTHD CHECK(PAY_MTHD IN ('CASH','DEFERED','CHECKS')));   






CREATE TABLE "YRMOK"."O_SALES_DTLS" (
"S_NO" NUMBER(13) NOT NULL, 
"CAT_ID" NUMBER(5) NOT NULL,
"PRICE" NUMBER(10) NOT NULL, 
"CAT_QUANT" NUMBER(7) NOT NULL, 
CONSTRAINT "FK_O_SALES_TOTAL" FOREIGN KEY("S_NO") 
REFERENCES "YRMOK"."O_SALES_MSTR"("S_NO")) ; 


-جدول خصومات الزبائن : customers_bu (يتم من خلالة تسديد قيمة المشتريات الآجلة للزبائن)


CREATE TABLE "YRMOK"."CUSTOMERS_BU" (
"BU_DATE" DATE NOT NULL, 
"BU_NO" NUMBER(13) NOT NULL, 
"C_ID" NUMBER(13) NOT NULL, 
"BU_AMOUNT" NUMBER(13, 2) NOT NULL, 
"BU_FOR" VARCHAR2(75 byte), 
CONSTRAINT "PK_CUSTOMERS_BU" PRIMARY KEY("BU_NO"));



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

رابط هذا التعليق
شارك

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

أختي الكريمة

	
Select c_id ,  nvl(sum(s_total),0)  
From	o_sales_mstr
Where  to_number(to_char(s_date,’yyyy’)) <> to_number(to_char(sysdate,’yyyy’))
Group by c_id;

Select c_id , nvl(sum(bu_amount),0)
From   customers_bu
Where  to_number(to_char(bu_date,’yyyy’)) <> to_number(to_char(sysdate,’yyyy’))
Group by c_id;




حسب الكود السابق

الرصيد الافتتاحي = nvl(sum(s_total),0) -  nvl(sum(bu_amount),0)




آو حسب الكود التالي

Select  c_id , c_name , c_credit   from  customers;

Select c_id ,  nvl(sum(s_total),0)  
From	o_sales_mstr
Where  to_number(to_char(s_date,’yyyy’)) = to_number(to_char(sysdate,’yyyy’))
Group by c_id;

Select c_id , nvl(sum(bu_amount),0)
From   customers_bu
Where  to_number(to_char(bu_date,’yyyy’)) = to_number(to_char(sysdate,’yyyy’))
Group by c_id;



الرصيد الافتتاحي = c_credit + nvl(sum(bu_amount),0) -  nvl(sum(s_total),0)




فهل هذه النتيجة صحيحة أم لا ارجوا تجربة الاكواد السابقة

رابط هذا التعليق
شارك

  • بعد 1 سنة...

السلام عليكم ، انا ايضا احتاج لهذا السؤال ، وقمت بتطبيق ما سبق لكن لم ينفذ المطلوب ، ارجو من الأخوة المحترفين التكرم بإجابة مفصلة وشافية



تحياتي

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية