我的目的是当前有三个表,分别是 表1,表2,表3。
表1,是要生成汇总信息的表,表2是定义层次信息的表,表3是层信息存储表。//分析主题数据存储表 表1
CREATE TABLE TBDIMENDATA
(
FDI_NO VARCHAR2(30) NOT NULL, --分析主题编号
ACCT_DATE CHAR(10) NOT NULL, --会计日期
COMP_CODE VARCHAR2(30) NOT NULL, --单位编码
DIMENSION1 VARCHAR2(30) DEFAULT ' ', --维值代码
DIMENSION2 VARCHAR2(30) DEFAULT ' ', --维值代码
DIMENSION3 VARCHAR2(30) DEFAULT ' ', --维值代码
DIMENSION4 VARCHAR2(30) DEFAULT ' ', --维值代码
DIMENSION5 VARCHAR2(30) DEFAULT ' ', --维值代码
DIMENSION6 VARCHAR2(30) DEFAULT ' ', --维值代码
DIMENSION7 VARCHAR2(30) DEFAULT ' ', --维值代码
DIMENSION8 VARCHAR2(30) DEFAULT ' ', --维值代码
DIMENSION9 VARCHAR2(30) DEFAULT ' ', --维值代码
DIMENSION10 VARCHAR2(30) DEFAULT ' ', --维值代码
FDI_DATA VARCHAR2(100) DEFAULT 0, --数据
LAST_UPDATEBY VARCHAR2(30) DEFAULT ' ', --修改者
LAST_UPDATE VARCHAR2(30) DEFAULT ' ' --修改时间
)//维值层次定义表 表2
CREATE TABLE TBDIMENHIERDEFINE
(
DIMENSION_CODE VARCHAR2(30) NOT NULL,       --维代码
HIERARCHY_CODE VARCHAR2(30) NOT NULL,       --层次代码
HIERARCHY_NAME VARCHAR2(60) NOT NULL, --层次描述
HIERARCHY_TYPE CHAR(1) NOT NULL, --层次类型('Y':结构分析,'N':非结构分析)
FDI_NO VARCHAR(30) NOT NULL, --分析主题
PRIMARY KEY (DIMENSION_CODE,HIERARCHY_CODE))
//维值层次信息表 表3
CREATE TABLE TBDIMENHIERVALUE
(
DIMENSION_CODE VARCHAR2(30) NOT NULL,       --维代码
HIERARCHY_CODE VARCHAR2(30) NOT NULL,       --层次代码
DIMVALUE_CODE VARCHAR2(30) NOT NULL,        --维值代码
DIMVALUE_PARENTCODE VARCHAR2(30) NOT NULL,  --维值父代码
DIMVALUE_SEQUENCE  INTEGER NOT NULL, --维值序号
HIERARCHY_LEVEL INTEGER NOT NULL,           --父层次级别
LAST_UPDATEBY VARCHAR2(30) NOT NULL,        --修改者
LAST_UPDATE VARCHAR2(30) NOT NULL,          --修改时间
PRIMARY KEY (DIMENSION_CODE,HIERARCHY_CODE,DIMVALUE_CODE,DIMVALUE_PARENTCODE,HIERARCHY_LEVEL))我的想法是。在将表一,表二,表三关联,通过表三已定义的父子层次,来给表一提供层次汇总。我写的SQL如下:select a1.ACCT_DATE,a1.DIMENSION1,a1.DIMENSION2,a1.DIMENSION3,a1.DIMENSION4,a1.DIMENSION5,sum(to_number(FDI_DATA)) as FDI_DATA from tbdimendata a1,tbdimenhierdefine a2,tbdimenhiervalue a3  where a1.FDI_NO ='CongealExtractOilIncmAnly154'  and a1.fdi_no = a2.fdi_no and a2.dimension_code = a3.dimension_code group by a1.ACCT_DATE,a1.DIMENSION1,a1.DIMENSION2,a1.DIMENSION3,a1.DIMENSION4,a1.DIMENSION5,rollup(COMP_CODE) connect by prior a3.dimvalue_code = a3.dimvalue_parentcode start with a3.dimvalue_code='D110005'用到了rollup connect by prior 和 start with 但是好像我写的不对,我去掉a1.FDI_NO ='CongealExtractOilIncmAnly154'  and 和,rollup(COMP_CODE) connect by prior a3.dimvalue_code = a3.dimvalue_parentcode start with a3.dimvalue_code='D110005'
就能出来结果,但是为什么加上前面的'CongealExtractOilIncmAnly154'的条件就出不来了呢。
我要是想将这些条件全加上应该怎么改》》请指教!

解决方案 »

  1.   

    楼主,节点问题不太懂,只是查了一下网上的说明,感觉你的条件与正常执行的sql写法不太不一样:
    SELECT LEVEL Q, GROUPID, PARENTID
    FROM A
    START WITH GROUPID IN (2, 3, 5)
    CONNECT BY GROUPID = PRIOR PARENTID
    你的里面没有‘PRIOR’,而且CONNECT BY也写在start with 的前面了(不知可否这样)。
      

  2.   

    fw:
      PRIORY 运算符必须放置在连接关系的两列中某一个的前面。
      对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。
      

  3.   

    看差了,你的sql也有prior。
    不好意思!
      

  4.   

    没关系。
    select a1.fdi_no,a1.comp_code,a1.ACCT_DATE,a1.DIMENSION1,a1.DIMENSION2,a1.DIMENSION3,a1.DIMENSION4,a1.DIMENSION5,sum(to_number(FDI_DATA)) as FDI_DATA  from tbdimendata a1,tbdimenhierdefine a2,tbdimenhiervalue a3  where  a1.fdi_no in('CongealExtractOilIncmAnly154') and a1.fdi_no = a2.fdi_no and a2.dimension_code = a3.dimension_code group by a1.fdi_no,a1.ACCT_DATE,a1.DIMENSION1,a1.DIMENSION2,a1.DIMENSION3,a1.DIMENSION4,a1.DIMENSION5,rollup(a1.comp_code)  start with a3.dimvalue_parentcode='D110005'  connect by prior a3.dimvalue_code =  a3.dimvalue_parentcode
    现在这样能查到但是我不太明白关联操作,他的实质是什么? 因为我现有的D110005对应子节点有D1100000001和D1100000002这两个子节点,但是绘出的却是别的层次,这个层次我从来没有定义过。