【发布时间】:2019-01-13 16:46:50
【问题描述】:
我创建了虚拟表来探索 SQL 中的分组概念。
我想对数据进行分组显示,
- 学生总分。
- 希望以逗号分隔的方式显示主题。
我的问题:为什么 SQL 不允许在 GROUP BY 子句中只保留 StudentID,当我们在 GROUP BY 子句中提到 ID、名称、.. 其他列时,它是允许的。
我收到此错误:
选择列表中的“SampleData.StudentName”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
以及如何在 SQL 输出中以逗号分隔显示主题?
这是我写的 SQL:
SELECT
StudentID,
StudentName,
Standard,
Subject,
SUM(MarksObtained)
FROM
SampleData
GROUP BY
StudentID, StudentName
--,Standard
--,Subject
ORDER BY
StudentID
供参考的样本表:
StudentID StudentName Standard Subject MarksObtained
-----------------------------------------------------
1 A VI Maths 59
3 C VII English 62
2 B IX Maths 75
2 B IX English 81
1 A VI Science 47
1 A VI History 61
预期输出:
StudentID StudentName Standard Subject MarksObtained
-------------------------------------------------------------------
1 A VI Maths,Science,History 167
3 C VII English 62
2 B IX Maths,English 156
【问题讨论】:
-
你在处理哪个 dbms ?
-
SQL 服务器。但是,我想要适用于所有服务器的通用查询。
-
对于字符串 concat 你不能有一般查询。请检查我的答案
-
感谢西蒙娜提供的信息。现在很清楚了。如果有任何与此相关的查询,将再次发布。任何想法,如何在 SQL Server 2012 中实现这一点?
-
感谢@GMB 提供信息。