You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SQL或Crystal Reports按科目分组展示通过考试的学生

解决按科目分组展示通过学生的问题

SQL查询写法

假设你的表名为StudentSubjects,包含字段StudentID、StudentName以及各科目(比如Math、English、Physics等,bit类型,1代表通过)。可以用UNPIVOT把列转成行,直接生成适合分组的基础数据:

SELECT 
    StudentID,
    StudentName,
    SubjectName
FROM 
    StudentSubjects
UNPIVOT (
    Passed FOR SubjectName IN (Math, English, Physics) -- 替换成你实际的科目列名
) AS UnpivotedData
WHERE 
    Passed = 1 -- 仅保留通过科目的记录

这个查询会把每个学生通过的科目拆成单独行,比如某学生通过数学和英语,就会生成两条对应记录。拿到结果后,不管是直接做报表还是导入Crystal Reports,都能轻松按SubjectName分组,不会出现重复标题问题。

Crystal Reports修复方案(基于原select *数据)

如果不想修改SQL,直接用原表数据做报表,按以下步骤调整:

  • 添加分组规则:
    插入一个组,选择“公式字段”作为分组依据,输入公式(替换成你的实际科目字段):

    If {StudentSubjects.Math} = 1 Then "数学"
    Else If {StudentSubjects.English} = 1 Then "英语"
    Else If {StudentSubjects.Physics} = 1 Then "物理"
    -- 继续添加剩余科目的判断
    
  • 抑制重复分组标题:
    右键点击分组标题→选择“格式化字段”→“公共”标签→勾选“抑制显示”,点击旁边的公式按钮,输入:

    Previous({@GroupSubject}) = {@GroupSubject}
    

    这里@GroupSubject是你刚才创建的分组公式字段,这样就能避免重复显示相同的科目标题。

  • 筛选有效数据:
    在报表“选择专家”中添加条件:

    {StudentSubjects.Math}=1 OR {StudentSubjects.English}=1 OR {StudentSubjects.Physics}=1
    

    只保留至少通过一门科目的学生记录。

  • 处理多科目通过的学生:
    如果学生通过多个科目,会在不同分组下重复出现。如果需要每个科目分组都显示该学生,这个逻辑是合理的;如果不想重复显示学生,建议优先使用前面的SQL转置方案,或者在Crystal中用子报表按科目单独展示对应学生。

内容的提问来源于stack exchange,提问作者unknown techh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:40:36