在单元格中组合多个数据。 SQL

时间:2013-12-03 06:20:12

标签: sql sql-server

这是一项家庭作业,但我想更进一步。 让我展示我的表格然后我会问我的问题。

Table -- Students         
StudentID PK, LastName, FirstName, 

Table -- Courses 
 CourseID PK, CourseName

Table -- Registrations 
StudentID FK, CourseID FK

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

Example.......

123456,     Smith,     John,  English, Math, Science 

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

2 个答案:

答案 0 :(得分:0)

您不要将它们放入1个单元格中。 它将是3行。一个例子可以使这一点更清晰:

  • John Smith:ID 1025

  • 数学ID 2500

  • 英文ID 2585
  • 小提琴ID 3250

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

  • StudentID CourseID
  • 1025 2500
  • 1025 2585
  • 1025 3250

答案 1 :(得分:0)

在圣诞节的精神中,你总能想象它是火鸡和STUFF它。

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

的更多信息,请参阅