针对A,B表合成一个表阿。。
意思简单点就是
A表有一列[X]是多个值。 B表也有一列[Y]是多个值。
如果[Y]只有一个值,新表中的列[Z]就是[Y]的值
,如果[Y]有两个不同,则[Z]也是[Y],不过要由[X]来决定该行对应的是什么。。不知道说清没

解决方案 »

  1.   

    换个说法吧。
    A表 id
    B表 id type
    合成一个新表C
    C表 newtypeA表有一个字段id= 1001 有5行数据, B表也有一个字段的id=1001 有1行数据,且type='xxxx'
    那么要合成一个5行数据的表,假设只有1个字段X
    现在只针对B表,因为B表只有1行,所以新表的字段X的值 全部是B表该行的值。
    所以新表
    C 为
    newtype
    'xxxx'
    'xxxx'
    'xxxx'
    'xxxx'
    'xxxx'如果B表id=1001有2行,type='xxx','yyy'
    则 C为
    newtype
    'xxx'
    'yyy'
    'xxx'
    'yyy'
    'xxx'
    如果B表id=1001有3行,同样的 type='xxx','yyy','zzz'
    则 C为
    newtype
    'xxx'
    'yyy'
    'zzz'
    'xxx'
    'yyy'
    就是轮回分配。当然C只是id=1001的情况。
    实际的新表是id=1001,1002,,,,,,的结合。
      

  2.   

    "如果字段b也有'2',那么newB根据字段2的'1'"
    =====================
    这个你说的和你给出的结果不符合。。
      

  3.   

    字段b也有'2',就是说明它有2个以上,2个以上要分配。如果字段b也有'2',那么newB根据字段2的'1',
    '2','3','4'的个数自动分配'1','2''1' 对应 '1'
    '2' 对应 '2'
    完了,又轮回
    '3' 对应 '1'
    '4'对应 '2'
    ....
      

  4.   

    可用 where B.b=A.2%(select count(*) from B where A.1=B.a)决定在集合select * from B where A.1=B.a中的行位置,再用宿主语言的游标机制移动到指定行,(不清楚select语句有没有选择指定行的语句,呵呵)
      

  5.   

    我现在打算做个函数来做.
    但是怎么取出一个指定记录的所在行数呢?
    A 字段1    2
      x        y
      b        z
     ....
    不用游标能否确定2='z' ,所在行是2
    ??
      

  6.   

    DROP TABLE TEST;
    DROP TABLE test1;
    CREATE TABLE TEST(x INT,y INT);
    CREATE TABLE TEST1(x INT,y INT);
    BEGIN
        INSERT INTO TEST (X, Y) VALUES (1, 1);
        INSERT INTO TEST (X, Y) VALUES (1, 4);
        INSERT INTO TEST (X, Y) VALUES (1, 3);
        INSERT INTO TEST (X, Y) VALUES (1, 2);
        INSERT INTO TEST (X, Y) VALUES (2, 2);
        INSERT INTO TEST (X, Y) VALUES (2, 2);
        INSERT INTO TEST (X, Y) VALUES (6, 5);
        INSERT INTO TEST (X, Y) VALUES (6, 6);
        INSERT INTO TEST (X, Y) VALUES (6, 7);
        INSERT INTO TEST (X, Y) VALUES (6, 4);
        INSERT INTO TEST (X, Y) VALUES (6, 4);
        COMMIT;
        INSERT INTO TEST1 (X, Y) VALUES (1, 1);
        INSERT INTO TEST1 (X, Y) VALUES (1, 2);
        INSERT INTO TEST1 (X, Y) VALUES (2, 1);
        INSERT INTO TEST1 (X, Y) VALUES (3, 1);
        INSERT INTO TEST1 (X, Y) VALUES (4, 1);
        INSERT INTO TEST1 (X, Y) VALUES (4, 1);
        INSERT INTO TEST1 (X, Y) VALUES (6, 1);
        INSERT INTO TEST1 (X, Y) VALUES (6, 2);
        INSERT INTO TEST1 (X, Y) VALUES (6, 3);
        INSERT INTO TEST1 (X, Y) VALUES (6, 4);
        COMMIT;
    END;
    /
    WITH o2 AS (
        SELECT x,
               y,
               ROW_NUMBER() over(PARTITION BY x ORDER BY y) ROW#,
               COUNT(*) over(PARTITION BY x) z
        FROM   TEST1
    )
    SELECT x1.x,(SELECT y FROM o2 WHERE o2.ROW#=x1.y AND o2.x=x1.x)
    FROM (
        SELECT o1.ROW#,
               o1.x,
               decode(MOD(o1.ROW#, o2.z), 0, o2.z, MOD(o1.ROW#, o2.z)) y
        FROM   (SELECT x, ROW_NUMBER() over(PARTITION BY x ORDER BY y) ROW#
                FROM   TEST) o1,
               o2
        WHERE  o1.x = o2.x
        GROUP  BY o1.ROW#,
                  o1.x,
                  decode(MOD(o1.ROW#, o2.z), 0, o2.z, MOD(o1.ROW#, o2.z))
        ORDER  BY x, ROW#) x1;
      

  7.   

    SELECT o1.ROW#, o1.x, o2.y
    FROM   (SELECT x, ROW_NUMBER() over(PARTITION BY x ORDER BY y) ROW#
            FROM   TEST) o1,
           (SELECT x,
                   y,
                   ROW_NUMBER() over(PARTITION BY x ORDER BY y) ROW#,
                   COUNT(*) over(PARTITION BY x) z
            FROM   TEST1) o2
    WHERE  o1.x = o2.x
    AND    o2.y = decode(MOD(o1.ROW#, o2.z), 0, o2.z, MOD(o1.ROW#, o2.z));
      

  8.   

    上面的语句错了
    SELECT o1.ROW#, o1.x, o2.y
    FROM   (SELECT x, ROW_NUMBER() over(PARTITION BY x ORDER BY y) ROW#
            FROM   TEST) o1,
           (SELECT x,
                   y,
                   ROW_NUMBER() over(PARTITION BY x ORDER BY y) ROW#,
                   COUNT(*) over(PARTITION BY x) z
            FROM   TEST1) o2
    WHERE  o1.x = o2.x
    AND    o2.ROW# = decode(MOD(o1.ROW#, o2.z), 0, o2.z, MOD(o1.ROW#, o2.z));
      

  9.   

    ROW_NUMBER() over 都识别不了
      

  10.   

    你的oracle不是8i企业版或更高版本