2014-02-27 54 views
2

表有4列a,b,c,d其中a有一组记录,每组有记录,每组b有c和d值。 如何使用Oracle xml sql生成以下结果?所有示例都涉及到emp表,只有1个“员工”分组。如果还有一个分组需要例如“城市”会怎么样? 谢谢。Oracle xml sql在2组的情况下

<GROUP_A> 
    <a val="1"> 
     <Group_B> 
     <b val="1"> 
      <Group_C> 
       <C> 
        <c>1</c> 
        <d>1</d> 
       </C> 
       <C> 
        <c>2</c> 
        <d>2</d> 
       </C> 
      </Group_C> 
     </b> 
     <b val="2"> 
      <Group_C> 
       <C> 
        <c>1</c> 
        <d>1</d> 
       </C> 
       <C> 
        <c>2</c> 
        <d>2</d> 
       </C> 
      </Group_C> 
     </b> 
     </Group_B> 
    </a> 
    <a val="2"> 
     <Group_B> 
     <b val="1"> 
      <Group_C> 
       <C> 
        <c>1</c> 
        <d>1</d> 
       </C> 
       <C> 
        <c>2</c> 
        <d>2</d> 
       </C> 
      </Group_C> 
     </b> 
     <b val="2"> 
      <Group_C> 
       <C> 
        <c>1</c> 
        <d>1</d> 
       </C> 
       <C> 
        <c>2</c> 
        <d>2</d> 
       </C> 
      </Group_C> 
     </b> 
     </Group_B> 
    </a> 
</GROUP_A> 

OP试过这种

SELECT XMLElement("Group_A", XMLAttributes(a AS "a"), 
     Xmlagg(XMLELEMENT ("Group_b", XMLAttributes(b AS "b"), 
     XMLELEMENT ("c",c), XMLELEMENT ("d",c)))) 
FROM table 
GROUP BY a 
+0

嘛,你尝试过什么? – OldProgrammer

+0

我尝试这样做:SELECT的XMLElement( “Group_A”, XMLATTRIBUTES(一个为 “A”), XMLAGG(XMLELEMENT( “Group_b”, XMLATTRIBUTES(B为 “B”), XMLELEMENT( “C”,C) , XMLELEMENT( “d”,C) ) ) ) FROM表 GROUP BY一个 – user3358291

回答

0

这里有一个查询,将返回你想要什么:

SELECT 
XMLELEMENT(
     "Group_A", 
     XMLAGG(
      XMLELEMENT(
      "a", 
      XMLATTRIBUTES(A AS "val"), 
      (SELECT 
       XMLELEMENT (
       "Group_b", 
       XMLAGG( 
        XMLELEMENT(
        "b", 
        XMLATTRIBUTES(t1.B AS "val"), 
        XMLELEMENT (
         "Group_C", 
         XMLAGG(
         XMLELEMENT (
          "C", 
          XMLELEMENT ("c",T1.C), 
          XMLELEMENT ("d",t1.D) 
         ) 
         ) 
        ) 
        ) 
       ) 
       ) 
      FROM TEST T1 
      WHERE T1.A = T2.A 
      GROUP BY t1.A, t1.B) 
      ) 
     ) 
     ) 

FROM (SELECT distinct t3.a FROM TEST t3) T2; 
+0

它的工作原理!!!!感谢Rida的!!!!!!!!!!!!! – user3358291

+0

@ user3358291太棒了,我在测试之前发布了它)所以请考虑接受答案:) –

+0

当然,我该怎么做呢?这是我第一次使用这个系统。 – user3358291