我有一张桌子 [CourseMaster] 喜欢
CourseId CourseName
-----------------------
01 ABC
02 DEF
03 GHI
04 JKL
05 MNO
06 PQR
07 STU
Run Code Online (Sandbox Code Playgroud)
我还有另一张表 [StudentMaster] 用于学生详细信息,例如
ROLLNO NAME ADDRESS
------------------------------
12345 RAM RAM ADDRESS
25695 HARI HARI ADDRESS
89685 JEFF JEFF ADDRESS
47896 DAISY DAISY ADDRESS
Run Code Online (Sandbox Code Playgroud)
我还有另一张表 [StudentCourseMaster] 用于学生课程详细信息,例如
ROLLNO CourseId
-------------------
12345 01
12345 02
12345 06
25695 02
25695 06
89685 03
89685 05
89685 06
89685 07
47896 03
Run Code Online (Sandbox Code Playgroud)
我试图以以下格式获取结果,但无法进行连接。
ROLLNO NAME ADDRESS Course
-------------------------------------------
12345 RAM RAM ADDRESS ABC,DEF,PQR
25695 HARI HARI ADDRESS DEF,PQR
89685 JEFF JEFF ADDRESS GHI,MNO,PQR,STU
47896 DAISY DAISY ADDRESS GHI
Run Code Online (Sandbox Code Playgroud)
我看过这个例子,但仍然无法弄清楚。
谢谢您,任何宝贵的建议将不胜感激。
对于 SQL Server 2017 及更高版本(包括 Azure SQL 数据库),使用相关子查询 来STRING_AGG获取每个学生的逗号分隔课程列表:
SELECT
sm.ROLLNO
,sm.NAME
,sm.ADDRESS
,(SELECT STRING_AGG(cm.CourseName,',')
FROM dbo.StudentCourseMaster AS scm
JOIN dbo.CourseMaster AS cm ON cm.CourseId = scm.CourseId
WHERE scm.ROLLNO = sm.ROLLNO
) AS Courses
FROM dbo.StudentMaster AS sm;
Run Code Online (Sandbox Code Playgroud)
在 SQL 2017 之前的版本中,您需要在子查询中使用 XML PATH 方法,就像您发布的示例中那样,而不是STRING_AGG.
下面是带有约束的 DDL 和示例数据:
CREATE TABLE dbo.CourseMaster(
CourseId int NOT NULL CONSTRAINT PK_CourseMaster PRIMARY KEY
,CourseName varchar(30) NOT NULL
);
INSERT INTO dbo.CourseMaster(CourseId, CourseName)
VALUES
(01, 'ABC')
,(02, 'DEF')
,(03, 'GHI')
,(04, 'JKL')
,(05, 'MNO')
,(06, 'PQR')
,(07, 'STU');
CREATE TABLE dbo.StudentMaster(
ROLLNO int NOT NULL CONSTRAINT PK_StudentMaster PRIMARY KEY
,NAME varchar(30) NOT NULL
,ADDRESS varchar(30) NOT NULL
);
INSERT INTO dbo.StudentMaster(ROLLNO, NAME, ADDRESS)
VALUES(
12345, 'RAM', 'RAM ADDRESS')
,(25695, 'HARI', 'HARI ADDRESS')
,(89685, 'JEFF', 'JEFF ADDRESS')
,(47896, 'DAISY', 'DAISY ADDRESS');
CREATE TABLE dbo.StudentCourseMaster(
ROLLNO int NOT NULL
,CourseId int NOT NULL
,CONSTRAINT PK_StudentCourseMaster PRIMARY KEY(ROLLNO,CourseId)
,CONSTRAINT FK_StudentCourseMaster_CourseMaster FOREIGN KEY(CourseId) REFERENCES dbo.CourseMaster(CourseId)
,CONSTRAINT FK_StudentCourseMaster_StudentMaster FOREIGN KEY(ROLLNO) REFERENCES dbo.StudentMaster(ROLLNO)
);
INSERT INTO dbo.StudentCourseMaster(ROLLNO, CourseId)
VALUES
(12345, 01)
,(12345, 02)
,(12345, 06)
,(25695, 02)
,(25695, 06)
,(89685, 03)
,(89685, 05)
,(89685, 06)
,(89685, 07)
,(47896, 03);
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2056 次 |
| 最近记录: |