0

假设我有一张如下表

reg   sub1   sub2   sub3
1      A      F      F
2      F      F      A
3      A      B      B
4      A      B      F
5      A      F      F

sub1、sub2、sub3 是三个不同的科目,值 A、B 和 F 是 A 和 B 获得某些分数但 F 不及格的成绩......现在我想要拥有一个“F”的学生的注册(即只有一科不及格)和两科,三科等等......怎么办......

我对一个 F 的学生的期望输出(即只有一门科目不及格)是......

   reg   sub1   sub2   sub3
    4      A      B      F

并且有两个 F(即两门科目不及格)的学生是......

   reg   sub1   sub2   sub3
    1      A      F      F
    2      F      F      A    
    5      A      F      F
4

1 回答 1

0

首先,就像@Mat 在上面的评论中所说,如果你标准化你的数据模型,这会容易得多。

其次,我假设您正在寻找一个 SQL 查询。第三,由于您根本没有提到您使用的是什么数据库系统(SQL Server、DB2、Oracle、Postgres 等),所以我将展示一个至少适用于 SQL Server 的解决方案:

SELECT *
FROM grades
WHERE (CASE sub1 WHEN 'F' THEN 1 ELSE 0 END) + 
      (CASE sub2 WHEN 'F' THEN 1 ELSE 0 END) +
      (CASE sub3 WHEN 'F' THEN 1 ELSE 0 END) = 2

这将在您的表 ( grades) 中找到所有记录,其中恰好有 2 个F等级。它所做的是将每个等级转换F为 1,每隔一个等级转换为 0,然后构建这些数字的总和。也就是说,它计算F每条记录的 s 数。

于 2013-03-10T12:00:59.073 回答