以下のクエリを結合/グループ化する方法を理解しようと一日中費やしました。誰かが私を助けたり、希望する出力を完了するように案内してくれませんか? -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 に分かれています。
私の意図を十分に明確に説明したことを願っています。後で、目的の出力を取得しようとするくだらないコードを投稿するかもしれません。ありがとう