0

以下のクエリを結合/グループ化する方法を理解しようと一日中費やしました。誰かが私を助けたり、希望する出力を完了するように案内してくれませんか? -i 簡単に参照できるように、外部キー値の一部を囲みました)

Below is my Table Grade
rowID testID  studentID     Grade
1     1       1(class2011)  50
2     1       1(class2011)  90
3     2       1(class2011)  100
4     2       2(class2012)  85


--Student table
StudentID   Classyear
1           2(class2011)
2           3(class2012)
3           1(class2010)

--Classyear Table
ClassYearID    Desc
1              2010
2              2011     
3              2012

以下の私のクエリ(testID、失敗(合格率= 80)、合格、取得、率を表示するため)

var h = list.GroupBy(a => a.testID)
        .Select(a => {
           int _failed = a.Count(g => g.Grade < 80);
           int _passed = a.Count(g => g.Grade >= 80);
           int _rate = (int)(_passed / (double)a.Count() * 100.0);

           return new {
             testID = a.Key,
             failed = _failed,
             passed = _passed,
             taken = a.Count(),
             rate = _rate,
          };     
        }); 

The result1
testID  failed  passed  taken   Rate
1       1       1       2       50%  
2       0       2       2       100%

ここに私の大きな問題があります。上のテーブルの学年にいる生徒は、同じ学年に属していません。これを testID と classyear でグループ化する必要があります。目的の出力については、以下を参照してください。

testID  ClassyearID failed  passed  taken   Rate    
1       1(2010)     0       0       0       0
1       2(2011)     1       1       2       50%
1       3(2012)     0       0       0       0

2       1(2010)     0       0       0       0
2       2(2011)     0       1       1       100%
2       3(2012)     0       1       1       100%

結果 1 との違いはすぐにわかります。Test2 の統計は、クラス 2011 とクラス 2012 に分かれています。

私の意図を十分に明確に説明したことを願っています。後で、目的の出力を取得しようとするくだらないコードを投稿するかもしれません。ありがとう

4

1 に答える 1