Sql 聚合查询中的开关大小写

Sql 聚合查询中的开关大小写,sql,tsql,aggregate,Sql,Tsql,Aggregate,我希望在我的SQL查询中有一个切换案例,这样当GROUPBY没有对任何我不想聚合的元素进行分组时,否则我想聚合。那有可能吗 我的问题是这样的: select count(1),AVG(student_mark) ,case when Count(1)=1 then student_subjectid else null end from Students group by student_id 我发现此错误列“student\u subjectid”在选择列表中无效,因为它不包含在聚合函数或G

我希望在我的SQL查询中有一个切换案例,这样当GROUPBY没有对任何我不想聚合的元素进行分组时,否则我想聚合。那有可能吗

我的问题是这样的:

select count(1),AVG(student_mark) ,case when Count(1)=1 then student_subjectid else null end from Students
group by student_id
我发现此错误列“student\u subjectid”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中


提前谢谢..

你到底为什么要把它复杂化

select count(1), AVG(Student_mark) Student_mark
from Students
group by student_id
如果只有一个学生分数,那么它也是总和、平均值、最小值和最大值-所以继续使用聚合!

编辑 最终符合您需求的数据集通常没有意义。实现这一目标的方法是合并(联合)两个不同的结果

select
    numRecords,
    Student_mark,
    case when numRecords = 1 then student_subjectid end    # else is implicitly NULL
from
(
select
    count(1) AS numRecords,
    AVG(Student_mark) Student_mark,
    min(student_subjectid) as student_subjectid
from Students
group by student_id
) x

感谢您的编辑……)编辑源后,错误消息变得不相关。您应该在更改后的代码后面附加一种
EDIT
注释。否则,您应该删除或替换原始错误消息,因为它现在很混乱。您在说什么?我自己编辑了源代码。你的意思是我应该保留我的问题,并将更改查询添加为编辑。我指的是你在问题中包含的错误消息:
列“Student\u mark”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。
i了解它与查询的以前版本相关。更新后的脚本不会产生此错误。这只是一个示例。。假设我想在这种情况下选择那个学生的一些Other属性,比如主体,那么?尽管这个解决方案是最简单的方法,我也有这个想法。。对于这样一个小问题,这是很好的。。但是我的实际查询涉及很多连接,我不能让它运行两次。。有什么想法吗。。
SELECT
  student_id,
  COUNT(*) AS MarkCount,
  AVG(student_mark) AS student_mark,
  CASE COUNT(*) WHEN 1 THEN MIN(student_subjectid) END AS student_subjectid
FROM Students
GROUP BY student_id