PDA

View Full Version : تغيير نحوه نمايش نتيجه جداول Join شده.



Milad Mohseny
یک شنبه 23 اسفند 1388, 23:40 عصر
با سلام خدمت دوستان عزيز.
فرض كنيد يك جدول داريم جهت ثبت مشخصات دانشجويان به صورت عكس ضميمه 1 (از سمت راست اولي)
و يك جدول جهت ثبت اطلاعات دروس به شكل عكس ضميمه 2 (از سمت راست دومي)
براي اينكه بدونيم هر دانشجو چه درس هايي رو انتخاب كرده از يك جدول استفاده ميشه به شكل عكس ضميمه 3
----------------------------------------------------------------------------------------
حالا اگه اين سه جدول رو باهم Join كنيم نتيجه ميشه عكس ضميمه 4
سوال: چه راه حلي وجود داره براي اينكه به عكس ضميمه 5 برسيم؟
البته استفاده از حلقه While براي رسيدن به اين نتيجه رو ميدونم. ميخواستم ببينم راه حل بهتري هست.

محمد سلیم آبادی
دوشنبه 24 اسفند 1388, 05:05 صبح
سلام،
شما قصد انجام الحاق سطرهای جدول را دارین (concatenating) که راه حل های متعددی داره ولی پیشنهاد من استفاده از ماده ی FOR XML PATH هستش در صورتی که از SQL Server 2005 و بالاتر استفاده می کنید در غیر اینصورت ساده ترین روش استفاده از یک UDF است.

supporter
دوشنبه 24 اسفند 1388, 12:47 عصر
من هم توي 2000 راه حل بهتري از استفاده از UDF به ذهنم نمي‌رسه.




Create Function fnStudentLessons (@StudentId int)
Returns VARCHAR(8000)
AS
Begin
Declare @Lessson varchar(8000)

Select @Lessson =COALESCE(@Lessson + ',', '') + LessonName
From tblStudentLesson SL
JOIN tblLesson L ON SL.LessonID = L.LessonID
Where SL.StudentId = @StudentId

Return @Lessson
End

Select S.StudentId, S.FirstName, S.LastName , dbo.fnStudentLessons(S.StudentId) AS Lessons
From tblStudentLesson SL
JOIN tblStudent S ON SL.StudentId = S.StudentId
JOIN tblLesson L ON SL.LessonID = L.LessonID
GROUP BY S.StudentId, S.FirstName, S.LastName

محمد سلیم آبادی
دوشنبه 24 اسفند 1388, 15:19 عصر
این یک مقاله ی خیلی خوبی در این مورد است:
http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql