یک راه حل:
اپتدا جدول اصلی یعنی لیست دروس دانشجویان را ایجاد و با داده های نمونه پر می کنیم.
CREATE TABLE Course
(
S_No int,
course nvarchar(25)
)
INSERT Course
SELECT 1,'math 1' UNION ALL
SELECT 1,'phisisc 1' UNION ALL
SELECT 2,'math 1' UNION ALL
SELECT 3,'culture' UNION ALL
SELECT 3,'history' UNION ALL
SELECT 3,'moadelat'
سپس با کمک Derived Table ، Ranking Functions، Case Function، و SELECT INTO یک query ایجاد می کنیم البته این راه حل فقط تا سه درس دانشجویان را نشان خواهد داد.
if object_id('temp') is not null drop table temp
SELECT S_no,
course,
row=ROW_NUMBER() OVER(PARTITION BY S_no ORDER BY course)
INTO temp
FROM Course
SELECT [Student Number]=(CASE WHEN D1.S_no IS NOT NULL THEN D1.S_no
ELSE
CASE WHEN D2.S_no IS NOT NULL THEN D2.S_no
ELSE D3.S_no
END
END),
ISNULL(D1.course,'') AS Course1,
ISNULL(D2.course,'') AS Course2,
ISNULL(D3.course,'') AS Cource3
FROM
(
SELECT S_no,
course
FROM temp
WHERE row=1
) D1
FULL OUTER JOIN
(
SELECT S_no,
course
FROM temp
where row=2
)D2 ON D1.s_no=D2.S_no
FULL OUTER JOIN
(
SELECT S_no,
course
FROM temp
WHERE row=3
)D3 ON D3.s_no=D2.S_no
Drop Table Temp
پس از اجرا Query داده های زیر به نمایش در خواهند آمد.
Student Number Course1 Course2 Cource3
-------------- ------------------------- ------------------------- -------------------------
1 math 1 phisisc 1
2 math 1
3 culture history moadelat