我对查询有问题。假设我有两个表,名为PersonInfo和PersonEducation。我使用StudentId在这些表上应用了联接操作,结果如下所示。
StudentIdId Name University Department Status
---------------------------------------------------------------
1 John Cambridge Computer Graduated
1 John Berkeley Mathematic Graduated
1 John Boston Economy Ongoing这只是学生的一个例子(约翰)。这表明约翰毕业于两所大学,还在一所大学学习。大学的数字可以根据学生的不同而改变。我的问题是,怎样才能在一排中显示这3行呢?我的意思是,我想在一行中显示所有的教育信息,这样一人就不会有多个行。
提前谢谢你的帮助。
发布于 2014-12-30 21:06:29
试验数据
DECLARE @TABLE TABLE (StudentIdId INT, Name VARCHAR(100), University VARCHAR(100)
, Department VARCHAR(100),[Status] VARCHAR(100))
INSERT INTO @TABLE VALUES
(1 ,'John','Cambridge','Computer' ,'Graduated'),
(1 ,'John','Berkeley' ,'Mathematic','Graduated'),
(1 ,'John','Boston' ,'Economy' ,'Ongoing'),
(2 ,'Pete','Cambridge','Computer' ,'Graduated'),
(2 ,'Pete','Berkeley' ,'Mathematic','Graduated')查询
SELECT t.StudentIdId
,t.Name
,STUFF((SELECT ', ' + University
FROM @TABLE
WHERE StudentIdId = t.StudentIdId
FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,2,'') AS University
,STUFF((SELECT ', ' + Department
FROM @TABLE
WHERE StudentIdId = t.StudentIdId
FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,2,'') AS Department
,STUFF((SELECT ', ' + [Status]
FROM @TABLE
WHERE StudentIdId = t.StudentIdId
FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,2,'') AS [Status]
FROM @TABLE t
GROUP BY t.StudentIdId ,t.Name结果
╔═════════════╦══════╦═════════════════════════════╦═══════════════════════════════╦═══════════════════════════════╗
║ StudentIdId ║ Name ║ University ║ Department ║ Status ║
╠═════════════╬══════╬═════════════════════════════╬═══════════════════════════════╬═══════════════════════════════╣
║ 1 ║ John ║ Cambridge, Berkeley, Boston ║ Computer, Mathematic, Economy ║ Graduated, Graduated, Ongoing ║
║ 2 ║ Pete ║ Cambridge, Berkeley ║ Computer, Mathematic ║ Graduated, Graduated ║
╚═════════════╩══════╩═════════════════════════════╩═══════════════════════════════╩═══════════════════════════════╝发布于 2014-12-30 21:02:43
这取决于输出所需的内容。
类似于:
SELECT pere.StudentId
, pere.StudentName
, peri.UniversityCount
, peri.GraduatedStatusCout
, peri.OngoingStatusCount
FROM PersonInfo peri
LEFT JOIN
(SELECT StudentId
, UniversityCount = COUNT(*)
, GraduatedStatusCount = SUM(IIF(Status = 'Graduated', 1, 0))
, OngoingStatusCount = SUM(IIF(Status = 'Ongoing', 1, 0))
FROM PersonEducation
GROUP BY StudentId) pere
ON peri.StudentId = pere.StudentId;https://stackoverflow.com/questions/27712374
复制相似问题