SELECT students.UserID, students.FName, students.LName, GROUP_CONCAT(classes.ClassName SEPARATOR ',') AS Classes
FROM classassociation
JOIN students
ON classassociation.UserID = Students.UserID
JOIN classes
ON classassociation.ClassID = classes.ClassID
WHERE classassociation.UserID = 3
GROUP BY ClassName;
这是我的Join语句,我正在尝试输出:
User ID | Name | Classes
1 John smith Science, Maths
目前输出为
User ID | FName | LName | Classes
1 John smith Science
1 John smith Maths
我正在尝试将其输出为HTML表格,因此更改它的输出方式可以节省一些空间并且看起来更具代表性。
任何帮助表示赞赏!
答案 0 :(得分:1)
我想你想要这个:
SELECT students.UserID,
CONCAT(students.FName,' ', students.LName) AS Name,
GROUP_CONCAT(classes.ClassName SEPARATOR ',') AS Classes
FROM classassociation
JOIN students
ON classassociation.UserID = Students.UserID
JOIN classes
ON classassociation.ClassID = classes.ClassID
WHERE classassociation.UserID = 3
GROUP BY UserID, CONCAT(students.FName, students.LName);
看起来您希望在一个列中将名字和姓氏放在一起,所以对于这些名称,请使用CONCAT。使用GROUP CONCAT这些类是正确的,因为您希望将多个行组合在一起。
然后你只需要调整GROUP BY语句。除了要聚合的列之外,您在SELECT语句中列出的任何列都需要存在。在您的情况下,正在聚合类,因此您可以从GROUP BY中排除它。用户ID和两个名称列都没有聚合,因此应列出这些列。
答案 1 :(得分:0)
而不是
GROUP BY ClassName;
执行:
GROUP BY students.UserID, students.FName, students.LName
答案 2 :(得分:0)
抱歉格式化....我是这个stackoverflow的新手。
以下代码将为您提供完美的结果
以下是详细信息:
我创建临时表只是为了让你演示
将您的列名替换为colum名称..
插入#temp值(' 1',' John',' smith',' science')
插入#temp值(' 1',' John',' Smith','数学')
选择
ID
,fname +' ' + LNAME AS NAME
,STUFF((选择DISTINCT',' +'' + T2.Class
FROM #temp T2
WHERE T1.ID = T2.ID
FOR XML PATH('')),1,2,'')AS CLASS
FROM #temp T1
GROUP BY ID,FNAME,LNAME
如果您有任何疑问,请告诉我 感谢