在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显示表格和图形
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显示表格和图形
{
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());测试可以返回正确的结果!