2011-05-11 65 views
0

我想展示一個顯示等級分佈的ASP.NET圖表控件。用於等級分佈的ASP.NET圖表

它應該顯示有多少學生獲得該等級,從A到F

如何使圖表包括等級A,B,C,d,F在沒有得到學生的情況下,說,一個D級的字母?例如,我想讓D值出現在X軸上,但學生數爲零。

正在從數據庫中提取數據,並使用ObjectDataSource綁定到圖表控件。

編輯:數據的結構是有一個學生表,每個stundent有一個名字,姓氏和成績。

編輯:對於網站的其他部分我使用實體框架與LINQ(而不是寫入原始SQL),因此,在完美的世界中,解決方案不會涉及原始SQL。

+0

我編輯下面的響應根據您的修改不使用原始的SQL – 2011-05-12 16:58:56

回答

0

是否可以更改您的查詢包括所有等級,然後填寫每個年級的詳細信息? 總劈 - 但向您展示的想法,因爲我不知道你的架構

 
select * from 
(
select 'a' Grade 
union 
select 'b' Grade 
union 
select 'c' Grade 
union 
select 'd' Grade 
union 
select 'f' Grade 
) as grades g 
outer join yourothertable t on g.Grade = t.Grade

編輯:閱讀你的編輯意識到你不希望這是一個SQL解決方案後,再選擇是走你的對象,並做一個linq加入他們的對象包含成績。

看到: http://www.hookedonlinq.com/OuterJoinSample.ashx 使用類似 公共類甲級 { 公共字符串LetterGrade; } 填充它們的列表,並對查詢中的結果執行外連接。你的新LINQ結果集合就是你現在的數據綁定。

0

不知道您的數據是如何構建的,要給出詳細的答案有點困難。這裏有一種使用SQL通用表表達式(CTE)的方法。它將組織數據,以便您可以輕鬆地將其綁定到圖表控件。

這將產生數據的表如下:

| Grade | TotalGrades | 
|-------|-------------| 
| A |  2  | 
| B |  1  | 
| C |  2  | 
| D |  0  | 
| E |  0  | 
| F |  1  | 

而這裏的代碼:

;With Grades (Grade) as 
(
    SELECT 'A' Grade 
    UNION 
    SELECT 'B' Grade 
    UNION 
    SELECT 'C' Grade 
    UNION 
    SELECT 'D' Grade 
    UNION 
    SELECT 'E' Grade 
    UNION 
    SELECT 'F' Grade 
), 
GradeResults (Name,Grade) as 
(
    SELECT 'John','A' 
    UNION 
    SELECT 'Sally','B' 
    UNION 
    SELECT 'Dave','C' 
    UNION 
    SELECT 'Charlie','C' 
    UNION 
    SELECT 'Lisa','F' 
    UNION 
    SELECT 'Russ','A' 
) 
SELECT a.Grade, COUNT(b.Grade) as TotalGrades FROM Grades a LEFT OUTER JOIN GradeResults b on a.Grade = b.Grade 
GROUP BY a.Grade 
ORDER BY a.Grade;