不知道大家有没遇到过这种情况~~~~~~~~

沝林 2005-12-09 09:18:12
在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显示表格和图形

...全文
111 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
软侠 2005-12-15
  • 打赏
  • 举报
回复
應該是版本的問題,另外和連接字串是否也有關系?
沝林 2005-12-09
  • 打赏
  • 举报
回复
谢谢zhpsam109(昊子鳖鳖),我想是不是OLEDB版本不一样,我上网查了下,确实有人存在和我一样的情况
zhpsam109 2005-12-09
  • 打赏
  • 举报
回复
经测试,不存在你说的问题!

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());

测试可以返回正确的结果!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧