表结构如下:
ID     PRM    FEE_TYPE  FEE_PROP  FEE_num
001   1000      Y0        10      100
001   1000      Y1        5       50其中PRM代表金额,FEE_TYPE代表费用类型,FEE_PROP代表费用比例,FEE_NUM代表费用金额(PRM*FEE_PROP/100),各字段均不为空,该表数据量约为1000万条
通过以下语句转换行列,并且创建新表
create table temp1  as 
select id,
max(decode(fee_type),'Y0',fee_prop),
max(decode(fee_type),'Y1',fee_prop),
max(decode(fee_type),'Y0',fee_num),
max(decode(fee_type),'Y1',fee_num)
from a
group by id
创建临时表,发现得出来新表中的有部分数据为空值,
在新表中找到有空值的ID号,如果指定ID号(比如在上面的语句中指定ID='001')创建表得出来的数据正常,这是什么原因?
这个基表是我自己数据库上的,不存在多个会话访问的问题,并且已经对表analyze

解决方案 »

  1.   

    补充:环境为windows 2003,数据库oracel 10.2
      

  2.   

    1.是不是 表数据量太多,导致max(decode)出问题。 换一个方法试试
    2.检查一下会不会有id段的空记录
    3.是不是有重复几率
      

  3.   

    max(decode(fee_type),'Y0',fee_prop)
    你这语句写的也有问题吧
      

  4.   

    id列是主键,不会有空或者重复的情况,且原始表中所有列都有NOT null的限制
    使用SELECT DISTINCT fee_type,里面只有Y0、Y1的内容
    并且在新表中肯定也有ID字段,找到有空值fee_prop,fee_num的ID号,如果指定ID号创建表得出来的数据正常max(decode(fee_type),'Y0',fee_prop)
    这句有什么问题?
      

  5.   

    原始表中ID、FEE_TYPE是主键,所有列均不为空