在ASP.NET中通过OLEDB访问Oracle时 ,使用到 count(distinct field)时就出错,上网查了下,好像是OLEDB不支持count distinct ,不知道大家是怎么解决这种问题的;如果单独使用count(distinct field)可以用下面的方法代替:
select count(*) from (select distinct field from table1)但是现在是在这样的语句里使用的:
SELECT nvl(EMPLOYEENO, '平均值') AS x,
decode(GROUPING(EMPLOYEENO), 0, SUM(JB), SUM(JB) / COUNT(DISTINCT EMPLOYEENO)) AS y 
FROM TABLE1
WHERE DEPTNAME = '开发部'
GROUP BY ROLLUP(EMPLOYEENO)这句在oracle环境下执行是没错的,但是到程序里就出错,我把SUM(JB) / COUNT(DISTINCT EMPLOYEENO)替换成 avg(JB) 和SUM(JB) / COUNT(*)就不会出错,不过这样结果就不对了
,因为一个员工可以有多条加班记录;这个sql是通过页面配置来执行的,所以不能用union的,只能通过配置统计表table1,分组字段x,合计字段y和where条件来运行sql显示表格和图形

解决方案 »

  1.   

    经测试,不存在你说的问题!public int test()
    {
    string sql=@"select count(distinct inforid) from basiccode where groupid='0009' order by inforid";
    System.Data.OleDb.OleDbCommand cmd= new System.Data.OleDb.OleDbCommand();
    cmd.CommandText=sql;
    System.Data.OleDb.OleDbConnection dbConn=new System.Data.OleDb.OleDbConnection("Provider=MSDAORA.1;Password=password;User ID=user;Data Source=myds");
    dbConn.Open();
    cmd.Connection=dbConn;

    int i=int.Parse(cmd.ExecuteScalar().ToString());
    return i;                       
                            
    }调用: int a=gd.test();
    MessageBox.Show(a.ToString());测试可以返回正确的结果!
      

  2.   

    谢谢zhpsam109(昊子鳖鳖),我想是不是OLEDB版本不一样,我上网查了下,确实有人存在和我一样的情况