数据库是这样设计的:
怎样统计这个ABCD答题人数的情况啊?
还有那个百分比?
如果这道题目是单选题的话那剩下的一些选项该如何办呢?
怎样做成想上图那个样子啊?
我已经做到了加载出题目跟答案,但是下面的统计里面的实在是搞不出来...
各位大大帮帮忙啊!小弟再这里谢谢了!

解决方案 »

  1.   


     protected void btnquery_Click(object sender, EventArgs e)
        {
            string query = @"SELECT  L.Account_Receivable_List_No,L.Charge_Date,L.Re,Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2)) WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年') WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期') 
                            ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' 
                            END,E.Authorize_No,E.Charge_Standard,R.Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) 
                            AS Arrearage_Amount 
                            FROM 
                            Account_Receivable_List L,Charge_Item I,Charge_Icence E,Residence_Item R,Student S,Class C ,Specialty P 
                            WHERE 
                            (L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0) AND (L.Residence_Item_No IS NOT NULL AND 
                            L.Residence_Item_No<>0) AND L.Charge_Icence_No=E.Charge_Icence_No AND L.Residence_Item_No=R.Residence_Item_No AND SUBSTRING(L.Charge_Date,1,4)='"+txttime.Text.Replace("'","\"")+"' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts AND" ;
                    query=query +" "+ @"S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No ='"+DropDownListDep.SelectedValue.ToString()+"' UNION ALL ";
                     query =query +" "+@"SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2)) WHEN 0 THEN 
                            (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年') WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期') ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' 
                            END,E.Authorize_No,E.Charge_Standard,' ' AS 
                            Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) 
                            AS Arrearage_Amount FROM Account_Receivable_List L,Charge_Item I,Charge_Icence E,Student S,Class C ,Specialty P WHERE (L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0) AND (L.Residence_Item_No IS NULL OR L.Residence_Item_No=0) 
                            AND L.Charge_Icence_No=E.Charge_Icence_No AND SUBSTRING(L.Charge_Date,1,4)='"+txttime.Text.Replace("'","\"")+"' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No ='"+DropDownListDep.SelectedValue.ToString()+"'  UNION ALL" ;
                          query =query +" " +@"SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2)) WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年') WHEN 1 THEN 
                            (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期') ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,' ' AS Authorize_No,0 AS 
                            Charge_Standard,R.Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) 
                            AS Arrearage_Amount 
                            FROM 
                            Account_Receivable_List L,Charge_Item I,Residence_Item R,Student S,Class C ,Specialty P
                             WHERE 
                            (L.Charge_Icence_No IS NULL OR L.Charge_Icence_No=0) AND (L.Residence_Item_No IS NOT NULL AND 
                            L.Residence_Item_No<>0) AND L.Residence_Item_No=R.Residence_Item_No AND SUBSTRING(L.Charge_Date,1,4)='"+txttime.Text.Replace("'","\"")+"' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No='"+DropDownListDep.SelectedValue.ToString()+"' UNION ALL";
                        query =query +" "+@"SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2)) WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年') WHEN 1 THEN 
                            (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期') ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,' ' AS Authorize_No,0 AS Charge_Standard,' ' AS 
                            Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) 
                            AS Arrearage_Amount 
                            FROM 
                            Account_Receivable_List L,Charge_Item I,Student S,Class C ,Specialty P 
                            WHERE
                            (L.Charge_Icence_No IS NULL OR L.Charge_Icence_No=0) AND (L.Residence_Item_No IS NULL OR L.Residence_Item_No=0) AND 
                            SUBSTRING(L.Charge_Date,1,4)='"+txttime.Text.Replace("'","\"")+"' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No='"+DropDownListDep.SelectedValue.ToString()+"'";
                        DataSet ds = new DataSet();
                        DataSet dscountAmount =new DataSet ();
                        DataSet dscountman = new DataSet();
                        string countman = "select COUNT(*) AS 已缴费人数  from(" + query + ")TT where (TT.Account_Receivable_Amount-TT.Derate_Amount-TT.Abate_Amount-TT.Refund_Amount-TT.Fact_Amount)=0";
                        string countAmount = @"select COUNT(*) AS 总人数, SUM(TT.Account_Receivable_Amount) as 应缴总额, SUM(TT.Fact_Amount) as 实缴总额 ,SUM(TT.Account_Receivable_Amount)-SUM(TT.Fact_Amount) as 欠缴总额 from(" + query + ")TT";
                        dscountAmount = Method.getDataSetBySQL(countAmount,"SQL");
                        dscountman = Method.getDataSetBySQL(countman,"SQL");
                        ds = Method.getDataSetBySQL(query,"SQL");
                        if (ds.Tables[0].Rows.Count != 0 && dscountman.Tables[0].Rows.Count!=0&&dscountAmount.Tables[0].Rows.Count!=0)
                        {
                            totalperson.Text = "应缴款人数:" + dscountAmount.Tables[0].Rows[0].ItemArray[0].ToString();
                            fact.Text = "实缴款人数:" + dscountman.Tables[0].Rows[0].ItemArray[0].ToString();
                            totalamount.Text = "应缴款合计:" + dscountAmount.Tables[0].Rows[0].ItemArray[1].ToString();
                            factamount.Text = "实缴款合计:"+dscountAmount.Tables [0].Rows[0].ItemArray[2].ToString();
                            borrowamount.Text = "欠缴款合计:" + dscountAmount.Tables[0].Rows[0].ItemArray[3].ToString();
                            int totalint = Int32.Parse(dscountAmount.Tables[0].Rows[0].ItemArray[0].ToString());
                            int factint = Int32.Parse(dscountman.Tables[0].Rows[0].ItemArray[0].ToString());
                            int borrowint = totalint - factint;
                            double ratedouble = borrowint * 1.0 / totalint;
                            rate.Text = "欠费比例为:" + ratedouble.ToString();
                            Method.DataBinder(dlsingledepcharge, ds);
                        }
                        else
                        {
                            Response.Write("<script>alert('提示:无数据记录');location.href='SingleDepCharge.aspx';</script>");
                        }
        }
    }