select count(*) from (select distinct a ,b,c from t1)xx;
所有的流行数据库应该支持

解决方案 »

  1.   

    可以试试select count( distinct a||'**'||b||'**'||c ) from t1;其中'**'是为了避免不同的a,b,c会有相同的a||b||c,你也可以选用任何不会在a,b,c中出现的字符。
      

  2.   

    不过,||只有Oracle支持! 所以看看能不能找到一种组合a,b,c的方法。
      

  3.   

    这是个办法,不过因为现在对程序的效率和通用性有很高要求,所以不能用这种办法。另外,还有一个和客户有关的原因。
    我们现在的项目是在改修别人的系统,而我们提出的其中一个理由就是原来的作者使用了很多字符串连接的方法,造成了很多隐蔽的bug.我们提出,在程序内部,永远保证结构数据的结构,在IO中,有必要以字符方式做系列化的地方,一定要对分割符做转义符。
      

  4.   

    使用group by也可以获得distinct 的纪录create table dis (a char(10),b char(10),c char(10)) ;insert into dis values (1,2,3);
    insert into dis values (1,2,3);
    insert into dis values (1,2,3);
    insert into dis values (2,3,4);
    insert into dis values (3,4,5);select count(*) from 
     (
       select * from dis group by a,b,c
     );
      

  5.   

    to:ThisFellow(ThisFellow) 
      其实你得到的是count值,而非拼接的字符串,所以应该不违背你们的原则。我不知道a,b,c是否都是数字,如果是这样,也可以count( distinct a*1000000+b*1000+c )这样.
      

  6.   

    select count(*) from (select a,b,c from table group by a,b,c) 用group by吧,好加索引,别用distinct.
      

  7.   

    多谢大家,不过最重要的一个问题是:
    Interbase不像Oracle一样支持 select * from (select * ....)
      

  8.   

    你想写所有数据库通用的sql?
    不现实,也没有必要.
      

  9.   

    换一个角度思考这个问题,如果对于表T1(a,b,c)
    我以a,b分组,是否有办法知道总共有几组呢?