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

سؤال عن جملة SQL

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

السلام عليكم :)

عندي جملة SQL صحيحة ولكن ناقصة الشروط...

SELECT	dbo.BSA.UserId,
	dbo.BSA.BSAId,
	dbo.User.UserName + ':' + CONVERT(varchar, COUNT(dbo.Request.RequestId)) AS BSA
FROM	dbo.BSA INNER JOIN
	dbo.User ON dbo.BSA.UserId = dbo.User.UserId INNER JOIN
	dbo.Request ON dbo.BSA.BSAId = dbo.Request.BSAId
WHERE	(dbo.BSA.BSAStatus = '1') AND
	(dbo.Request.StatusId = '6' OR dbo.Request.StatusId = '7')
GROUP BY dbo.BSA.BSAId,
	dbo.BSA.UserId,
	dbo.User.UserName

عند تشغيلها تظهر النتائج بهذا الشكل

UserId	BSAId	BSA
79	3	A:2
157	7	B:1
263	10	C:3
475	14	D:5
815	24	E:1
824	27	F:1

الآن اريد عمل التالي:

اريد اظهار اسم الشخص X,Y&Z وبجانبه عدد الـ Requests حتى ولو كان صفر!! اعتقد المشكله بالـ Join!!

هل من تصحيح للجملة؟ وشكراً مقدماً

#2

السلام عليكم

جرب الجملة التالية

select [User].UserId, BSA.BSAId,
	   [User].UserName +':' + convert(varchar,Count(Request.StatusId)) AS BSA
 from (BSA left join Request 
			on (BSA.BSAId = Request.BSAId and (Request.StatusId = '6' or Request.StatusId = '7')))
	   right join [User] 
			on (BSA.UserId=[User].UserId)
 where BSA.BSAStatus = '1'			
 group by [User].UserId, BSA.BSAId, [User].UserName

اذا أردت ان ترجع الusers الذين ليسوا موجودين في ال dbo.BSA استخدم

select [User].UserId, BSA.BSAId,
	   [User].UserName +':' + CONVERT(varchar,Count(Request.StatusId)) AS BSA
 from (BSA left join Request on BSA.BSAId = Request.BSAId)
	   right join [User] on (BSA.UserId=[User].UserId and BSA.BSAStatus = '1')
where  (Request.StatusId = '6' OR Request.StatusId = '7' or Request.StatusId is null)
 group by [User].UserId, BSA.BSAId, [User].UserName

طبعا تستطيع استخدام الشرط التالي في where بدل ان تضعه في ال join

(Request.StatusId = '6' or Request.StatusId = '7')

ولكن اضف عليه

(Request.StatusId = '6' OR Request.StatusId = '7' or Request.StatusId is null)

وايضا تستطيع ان تستخدم الجملة التالية

select dbo.User.UserId,dbo.BSA.BSAId,
	   dbo.User.UserName +':' + 
	   CONVERT(varchar,(select count(RequestId) from dbo.Request 
						 where Request.BSAId=BSA.BSAId and (Request.StatusId = '6' OR Request.StatusId = '7')))As BSA
from  dbo.User join  dbo.BSA
on dbo.User.UserId =dbo.BSA.UserId  and BSA.BSAStatus = '1'
/*where BSA.BSAStatus = '1'*/

واذا أردت ان ترجع الusers الذين ليسوا موجودين في ال dbo.BSA استخدم left join بدل من join

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

هذا الموضوع مغلق.

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