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は3つの異なる科目であり、値A、B、Fは、AとBが特定のポイントを保持しているが、Fが失敗している成績です。すなわち、1つの科目のみで失敗しました)と2つの科目、3つの科目など....tatを行う方法.....

Fが1つ(つまり、1つの科目でのみ失敗した)の学生に希望する出力は...

   reg   sub1   sub2   sub3
    4      A      B      F

そして2つのF(すなわち2つの科目で失敗した)を持つ学生は...

   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など)についてはまったく言及していなかったため、少なくともSQLServerで機能するソリューションを紹介します。

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 に答える