http://community.csdn.net/Expert/topic/3761/3761586.xml?temp=.7051355

解决方案 »

  1.   

    --tryselect a.yhh,
           nvl(b.x1,0) x,
           nvl(b.y1,0) y,
           nvl(b.z1,0) z,
           nvl(b.x2,0) x,
           nvl(b.y2,0) y,
           nvl(b.z2,0) z,
           nvl(b.x3,0) x,
           nvl(b.y3,0) y,
           nvl(b.z3,0) z
    from a,
    (
      select yhh,
             max(decode(no,1,x,null)) x1,
             max(decode(no,1,y,null)) y1,
             max(decode(no,1,z,null)) z1
             max(decode(no,2,x,null)) x2,
             max(decode(no,2,y,null)) y2,
             max(decode(no,2,z,null)) y3,
             max(decode(no,3,x,null)) x3,
             max(decode(no,3,y,null)) y3,
             max(decode(no,3,z,null)) z3
      from 
      (
        select row_number() over(partition by yhh order by rowid) no,yhh,x,y,z from b 
      )
    ) b
    where a.yhh=b.yhh(+);
      

  2.   

    因为你的列和行都不固定.所以偶认为一句sql是不能实现的.
    这个要考虑用过程来实现.可以用动态sql来做.
      

  3.   

    试了一下ORARichard(没钱的日子......) 的方法:)写得很好!值得学习!
    还少个分组:)可能ORARichard遗漏了呵呵!12:37:01 SQL*PLUS>SELECT A.YHH,
    12:43:37   2         NVL(Bb.X1, 0) X,
    12:43:37   3         NVL(Bb.Y1, 0) Y,
    12:43:37   4         NVL(Bb.Z1, 0) Z,
    12:43:37   5         NVL(Bb.X2, 0) X,
    12:43:37   6         NVL(Bb.Y2, 0) Y,
    12:43:37   7         NVL(Bb.Z2, 0) Z,
    12:43:37   8         NVL(Bb.X3, 0) X,
    12:43:37   9         NVL(Bb.Y3, 0) Y,
    12:43:37  10         NVL(Bb.Z3, 0) Z
    12:43:37  11    FROM A,
    12:43:37  12         (SELECT YHH,
    12:43:37  13                 MAX(DECODE(NO, 1, X, NULL)) X1,
    12:43:37  14                 MAX(DECODE(NO, 1, Y, NULL)) Y1,
    12:43:37  15                 MAX(DECODE(NO, 1, Z, NULL)) Z1,
    12:43:37  16                 MAX(DECODE(NO, 2, X, NULL)) X2,
    12:43:37  17                 MAX(DECODE(NO, 2, Y, NULL)) Y2,
    12:43:37  18                 MAX(DECODE(NO, 2, Z, NULL)) z2,
    12:43:37  19                 MAX(DECODE(NO, 3, X, NULL)) X3,
    12:43:37  20                 MAX(DECODE(NO, 3, Y, NULL)) Y3,
    12:43:37  21                 MAX(DECODE(NO, 3, Z, NULL)) Z3
    12:43:37  22            FROM (SELECT ROW_NUMBER() OVER(PARTITION BY YHH ORDER BY ROWID) NO,
    12:43:37  23                         YHH,  X,   Y,  Z  FROM B)
    12:43:37  24           GROUP BY YHH) Bb
    12:43:37  25   WHERE A.YHH = bB.YHH(+);YHH                  X          Y          Z          X          Y          Z          X          Y          Z
    -------------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
    1001                 X1         Y1         Z1         x2         y2         z2         x3         y3         z3
    1002                 x4         y4         z4         x5         y5         z5         0          0          0
    1003                 x6         y6         z6         0          0          0          0          0          0
    1004                 x7         y7         z7         x8         y8         z8         0          0          0已用时间:  00: 00: 00.00
    12:43:38 SQL*PLUS>
      

  4.   

    使用分析函數確實不錯  ORARichard(没钱的日子......) 的方法值得學習!不過如果行列不確定的話就比較難辦
      

  5.   

    liuyi8903(甜脆夹心)
    我已经是第N次漏掉这个group by了:)
      

  6.   

    请问一下高手们,为什么我用分析函数总是报ORA-00439: 未启用特征: OLAP Window Functions,是需要改什么参数吗?
      

  7.   

    to  liuyi8903(甜脆夹心)分 ,请问你的联系方式.我QQ:43236893 MSN:[email protected],手机13837012989,希望能成为朋友。