Member 12234802 Ответов: 1

Как объединить три таблицы и преобразовать строки в столбцы с помощью динамического запроса SQL


I have three tables dbo.Student col(StudentID,Student Name and

Subjects                Test
---------------         ----------------
subjectId int           StubjectId int foreignkey reference Subjects
Subject Name            StudentID int  foreignkey reference  Student
                        Marks int
Now I need to display the test Result As

Student Name     Math   Geo 
----------------------------
Michael          90     67


Что я уже пробовал:

SELECT *
FROM 
(
	SELECT 
	[FRMSIXWKTST.SubjectId],Marks
	FROM FRMSIXWKTST,Subjects		
)as s
PIVOT
(
	AVG(Marks)
	FOR [Subject Name] IN (SubjectId)
)as Pivot_alias

pt1401

Я думаю, что вам нужно переписать свой вопрос :-)

1 Ответов

Рейтинг:
8

Bryian Tan

Вот что-то похожее, что вы можете изучить и связать это с вашим заданием.
В SQL разворота строк в столбцы с Join таблицы[^]

BEGIN --CREATE TEMP TABLE
	DECLARE @Sport TABLE (
		SportId		INT,
		SportName		VARCHAR(50)
	)

	DECLARE @Game TABLE (
        SportId		INT,
		AthleteId		INT,
		Scores			INT
	)

	DECLARE @Athlete TABLE (
		AthleteId		INT,
		AthleteName		VARCHAR(50)
	)
END

BEGIN --INSER INTO @Athlete TABLE
	INSERT INTO @Athlete
		SELECT 1, 'Michael'
		UNION
		SELECT 2, 'Richard';
END

BEGIN --INSER INTO @Sport TABLE
	INSERT INTO @Sport
		SELECT 1, 'Ping Pong'
		UNION
		SELECT 2, 'Basketball'
		UNION
		SELECT 3, 'Football';
END

BEGIN --INSER INTO @Game TABLE
	INSERT INTO @Game
		SELECT 1, 1, 90
		UNION
		SELECT 2, 1, 67
		UNION
		SELECT 3, 1, 78
		UNION
		SELECT 1, 2, 77
		UNION
		SELECT 2, 2, 87
		UNION
		SELECT 3, 2, 54;
END

SELECT AthleteName, [Ping Pong], Basketball
FROM 
(
	SELECT 
	 AthleteName, SportName, Scores  
	 FROM @Game t JOIN  @Athlete s
			ON t.AthleteId = s.AthleteId
		JOIN @Sport sub 
			ON t.SportId = sub.SportId
	WHERE t.AthleteId = 1
)as s
PIVOT
(
	AVG(Scores)
	FOR SportName IN ([Ping Pong], Basketball, Football)
)as Pivot_alias

Выход:
AthleteName  Ping Pong Basketball
Michael      90        67