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

تحديث بيانات جدول من خلال جدول آخر

بدأه محمد فؤاد تركي في 25 سبتمبر 2012 · 11 رد · 1,890 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السادة الزملاء

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

أريد تحديث حقل سعر الشراء "PurUnitPrice" ,وحقل سعر البيع "SaleUnitPrice" في جدول الاصناف بناء علي آخر سعر شراء وآخر سعر بيع تم تسجيلة في آخر فاتورة شراء في جدول تسجيل فواتير الشراء

فقمت بكتابة بداية في كتابة هذه الجملة لعمل المطلوب

UPDATE Items

SET dbo.items.PurUnitPrice = dbo.Transactions.PurUnitPrice,dbo.items.SaleUnitPrice = dbo.Transactions.SaleUnitPrice
FROM Transactions

WHERE items.ItemNumber = dbo.Transactions.ItemNumber

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

فقمت بتغيير جملة الاستعلام لكي تتلائم مع أريد كالتالي

UPDATE Items

   SET dbo.items.PurUnitPrice = (SELECT MAX(dbo.Transactions.DAdd_Doc))
                   FROM Transactions
                  WHERE items.ItemNumber = dbo.Transactions.ItemNumber

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

Msg 157, Level 15, State 1, Line 3
An aggregate may not appear in the set list of an UPDATE statement.

ولا أعرف كيف أحدث سعر الشراء و سعر البيع في جدول الاصناف بيناء علي آخر فاتورة شراء تم تسجيلها

ارجو المساعدة في هذا الامر

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 25 سبتمبر 2012 في 08:44

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#2

وجدت مثال لكن النتيجة لا يقوم بتحديث السعر بناء علي آخر فاتورة شراء و مازال يقوم بتحديث سعر الفاتورة الاولي فقط

UPDATE A
SET [PurUnitPrice] = B.[PurUnitPrice]
FROM [dbo].[Items] A INNER JOIN 
(SELECT [ItemNumber],[PurUnitPrice],MAX([Dadd_Doc]) AS [Last Invoice]
FROM [dbo].[Transactions]
GROUP BY [ItemNumber],[PurUnitPrice]) B
ON A.[ItemNumber] = B.[ItemNumber]

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#3

أنا رح ساعدك بشكل عام لأنو و الله انا أعمل في الشركة في هذه اللحظة ..

بس رح جاوبك عالسريع .. استعلامك يمكن كتابتو على النحو التالي:

Update Items Set 

	PurUnitPrice = (Select Top 1 PurUnitPrice From Transactions 
		Where ItemID = 5 Order By TransDate Desc),
	SaleUnitPrice = (Select Top 1 SaleUnitPrice From Transactions 
		Where ItemID = 5 Order By TransDate Desc)

Where ItemID = 5

يمكن تحسينه أكثر بس متل ما خبرتك .. حل سريع

تحياتي

تم تعديل هذه المشاركة بواسطة imadouzoun في 25 سبتمبر 2012 في 10:53

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#4

أخي الفاضل imadouzoun

بارك الله فيك

لقد استخدمت الكود وقمت بضبطة وهو الان يعمل بشكل ممتاز

وشكرا لك وياريت تحاول ايجاد ولو قليل من الوقت لهذا المنتدي العظيم

والله يعينك علي أعمالك

Update Items Set  
        PurUnitPrice = (Select Top 1 PurUnitPrice From Transactions 
                Where items.ItemNumber = Transactions.ItemNumber Order By DAdd_Doc Desc),
        SaleUnitPrice = (Select Top 1 SaleUnitPrice From Transactions 
                Where items.ItemNumber = Transactions.ItemNumber Order By DAdd_Doc Desc)

Where items.ItemNumber = ItemNumber

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#5

مشكور أخي فؤاد .. الله يبارك فيك

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#6

أخي الفاضل imadouzoun

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

ALTER Proc [dbo].[AddDocupdatePurPrice]

as
begin
Update Items Set  
        PurUnitPrice = (Select Top 1 PurUnitPrice From Transactions 
                Where items.ItemNumber = Transactions.ItemNumber Order By DAdd_Doc Desc),
        SaleUnitPrice = (Select Top 1 SaleUnitPrice From Transactions 
                Where items.ItemNumber = Transactions.ItemNumber  Order By DAdd_Doc Desc)

Where items.ItemNumber = ItemNumber 
and items.LastSalePrice = 'True'
and items.LastPurPrice = 'True'
end

Msg 512, Level 16, State 1, Procedure AfterUpdate, Line 7
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 30 أكتوبر 2012 في 07:43

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#7
update Items

   set dbo.items.PurUnitPrice = 
   (select dbo.Transactions.PurUnitPrice from Transactions
    where dbo.Transactions.ItemNumber = items.ItemNumber
    and dbo.Transactions.DAdd_Doc = 
    (select max(dbo.Transactions.DAdd_Doc)  from dbo.Transactions     
     where dbo.Transactions.ItemNumber =items.ItemNumber ))

--where items.ItemNumber = 5

تم تعديل هذه المشاركة بواسطة Principle في 30 أكتوبر 2012 في 11:05

#8

تم حل المشكلة بالشكل التالي

شكرا

Update Items Set  
        PurUnitPrice = (Select Top 1 PurUnitPrice From Transactions 
                Where items.ItemNumber = Transactions.ItemNumber Order By DAdd_Doc Desc),
        SaleUnitPrice = (Select Top 1 SaleUnitPrice From Transactions 
                Where items.ItemNumber = Transactions.ItemNumber  Order By DAdd_Doc Desc)



where items.ItemNumber = @ItemNumber
and items.LastPurPrice = 'True'
and items.LastSalePrice = 'True'

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#9

لو استخدمت الـ Trigger كان افضل واسرع

من مواضيعي

دوال التاريخ والوقت الجديدة المضافة في نسخة السيكوال سيرفر 2012

درس في كيفية التعامل مع خاصية في السيكوال سيرفر Full Text Index

Microsoft Certified Trainer SQL Server Data Base Development & Administrator

Microsoft Certified IT Professional SQL Server Data Base Development & Administrator

#10

قد يفيدك هذا الكود

Update Items 
Set  
        	PurUnitPrice = t.PurUnitPrice,
	SaleUnitPrice = t.SaleUnitPrice
from 
	Items 
inner join
	(Select Top 1 SaleUnitPrice, PurUnitPrice 
	From Transactions 
	where ItemNumber = @ItemNumber
	Order By DAdd_Doc Desc) as t
on 
	items.ItemNumber = t.ItemNumber

where items.ItemNumber = @ItemNumber
and items.LastPurPrice = 'True'
and items.LastSalePrice = 'True'
#11

بارك الله فيك أخي الفاضل كريم

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#12

لا شكر علي واجب

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