繁体   English   中英

在一个单元中组合多个数据。 sql

[英]Combining more than one piece of data in a cell. sql

这是用于家庭作业,但我想走得更远。 让我展示我的桌子,然后我问我的问题。

Table -- Students         
StudentID PK, LastName, FirstName, 

Table -- Courses 
 CourseID PK, CourseName

Table -- Registrations 
StudentID FK, CourseID FK

问题是如何在该特定单元格中添加多个“课程名称”? 例如,我有一个学生上3个班,我可以在同一行的同一单元格中显示该特定学生的所有3个课程名称吗?

Example.......

123456,     Smith,     John,  English, Math, Science 

抱歉,这看起来很简单,但是搜索后我找不到我想要的东西。

您不要将它们放入1个单元格中。 这将是3行。 一个示例将使这一点更加清楚:

  • 约翰·史密斯(John Smith):ID 1025

  • 数学ID 2500

  • 英文ID 2585
  • 小提琴ID 3250

在数据库中,您将获得以下行:

  • 学生编号课程编号
  • 1025 2500
  • 1025 2585
  • 1025 3250

好吧,本着圣诞节的精神,您总是可以想象这是一只火鸡,然后把它塞满。

DECLARE @Students TABLE(StudentID INT, LastName VARCHAR(50), FirstName VARCHAR(50))
DECLARE @Courses TABLE(CourseID INT, CourseName  VARCHAR(50))
DECLARE @Registrations TABLE(StudentID INT, CourseID INT)

INSERT INTO @Students VALUES
(123456, 'John', 'Smith'),(123457, 'Adrian', 'Sullivan'),(123458, 'Dude', 'Guy')

INSERT INTO @Courses VALUES
(1,'English'),(2,'Math'),(3,'Science')

INSERT INTO @Registrations VALUES
(123456,1),(123456,2),(123456,3),(123457,1),(123457,2),(123458,3)

DECLARE @STID INT
SELECT *,  STUFF((SELECT ','+C2.CourseName
              FROM  @Registrations R2
              INNER JOIN @Courses C2 ON C2.CourseID = R2.CourseID
              WHERE R2.StudentID = S.StudentID
              FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '') [AllText]
FROM @Students S

有关STUFF的更多阅读

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM