SELECT 
  XBGATHER_ACCEPTER_PAY.OPER_ID,
  GATHER_NO,
  USERNAME,
  bill_list,
  SUM(PRICE_SUM) AS SUM 
  FROM XBGATHER_ACCEPTER_PAY 
  LEFT JOIN PT_USER ON USERNO = OPER_ID 
  WHERE OP_TIME >= TO_DATE('2010-09-27 00:00:00','yyyy-mm-dd hh24:mi:ss') 
  AND OP_TIME <= TO_DATE('2010-09-27 23:59:59','yyyy-mm-dd hh24:mi:ss') 
  AND IS_DEL='0' 
  AND OPER_ID='999' 
GROUP BY XBGATHER_ACCEPTER_PAY.OPER_ID;上面语句报不是group by表达式错误,我将非聚合函数字段都加入group by;
GROUP BY XBGATHER_ACCEPTER_PAY.OPER_ID, GATHER_NO, USERNAME, bill_list;
这时报:不一致的数据类型: 要求 - 得到的却是 CLOB;原因bill_list是clob类型;
把bill_list从select与group by中删除,select成功;但我现在需要同时把bill_list也select出来;
应该怎么解决这个问题,请各位朋友帮帮忙。

解决方案 »

  1.   

    SELECT  
      XBGATHER_ACCEPTER_PAY.OPER_ID,
      GATHER_NO,
      USERNAME,
      bill_list,
      SUM(PRICE_SUM) AS SUM  
      FROM XBGATHER_ACCEPTER_PAY  
      LEFT JOIN PT_USER ON USERNO = OPER_ID  
      WHERE OP_TIME >= TO_DATE('2010-09-27 00:00:00','yyyy-mm-dd hh24:mi:ss')  
      AND OP_TIME <= TO_DATE('2010-09-27 23:59:59','yyyy-mm-dd hh24:mi:ss')  
      AND IS_DEL='0'  
      AND OPER_ID='999'  
    GROUP BY   XBGATHER_ACCEPTER_PAY.OPER_ID,  GATHER_NO,  USERNAME,  bill_list;
      

  2.   

    聚组函数以外的所有字段都要出现在group by后面.
      

  3.   

    你的bill_list字段的值最大长度是多少?
      

  4.   

    我知道,但bill_list是clob类型,group by报错!
      

  5.   

    clob是不能做常规的比较的,所以clob字段不能用在group by里,如果你的bill_list长度不大的话转成varchar再group by看看.
      

  6.   

    SQL> select * from test_clob_group;
     
             ID NAME                                                                                   VALUE
    ----------- -------------------------------------------------------------------------------- -----------
              1 123                                                                                        1
              1 123                                                                                        2
              2 1234                                                                                       2
     
    SQL> select id,name,sum(value) from test_clob_group group by id,name;
     
    select id,name,sum(value) from test_clob_group group by id,name
     
    ORA-00932: inconsistent datatypes: expected - got CLOB
     
    SQL> select id,dbms_lob.substr(name),sum(value) from test_clob_group group by id,dbms_lob.substr(name);
     
             ID DBMS_LOB.SUBSTR(NAME)                                                            SUM(VALUE)
    ----------- -------------------------------------------------------------------------------- ----------
              1 123                                                                                       3
              2 1234                                                                                      2
     
    SQL> 
      

  7.   

    如果你的clob超过4000字符的话,只能是拆成多个varchar字段,然后再group by
      

  8.   

    可以利用子查询。下面的语句可能会有问题,因为不知道各个列都属于哪张表,只能表达个大概意思。SELECT 
      p.OPER_ID,
      GATHER_NO,
      USERNAME,
      (select bill_list from XBGATHER_ACCEPTER_PAY where OPER_ID=p.OPER_ID and rownum=1) bill_list,
      SUM(PRICE_SUM) AS SUM 
    FROM XBGATHER_ACCEPTER_PAY p
      LEFT JOIN PT_USER  u ON USERNO = OPER_ID 
    WHERE OP_TIME >= TO_DATE('2010-09-27 00:00:00','yyyy-mm-dd hh24:mi:ss') 
      AND OP_TIME <= TO_DATE('2010-09-27 23:59:59','yyyy-mm-dd hh24:mi:ss') 
      AND IS_DEL='0' 
      AND OPER_ID='999' 
    GROUP BY p.OPER_ID, GATHER_NO, USERNAME;
      

  9.   

    xman,那个trc文件怎么查看啊,我trace完了看不懂.