有table1
Fld1 Fld2
D1   100有table2
Fld1 Fld2
D1   1
D1   2
D1   3写一个SQ语句L,得到如下数据:
D1 1 100
D1 2 0
D1 3 0

解决方案 »

  1.   

    select a.Fld1 ,b.Fld2,a.Fld2 from table1 a,table2 b where b.Fld1 = a.Fld1(+)
      

  2.   

    select a.Fld1 ,b.Fld2,nvl(a.Fld2,0)from table1 a,table2 b where b.Fld1 = a.Fld1(+) 
      

  3.   

    有table1
    Fld1 Fld2
    D1   100
    D2   200有table2
    Fld1 Fld2
    D1   1
    D1   2
    D1   3D2   1
    D2   2
    D2   3写一个SQ语句L,得到如下数据:
    D1 1 100
    D1 2 0
    D1 3 0D2 1 200
    D2 2 0
    D2 3 0
      

  4.   


    不对啊,返回的是:
    D1 1 100
    D1 2 100
    D1 3 100
      

  5.   

    下面是建表和初始记录
    create table table1 (
      FLD1 VARCHAR2(111),
      FLD2 NUMBER(20,2)
    )
    create table table2(
      FLD1 VARCHAR2(111),
      FLD2 NUMBER(20,2)
    )
    insert into table1 (FLD1, FLD2) values ('D1', 100);insert into table2 (FLD1, FLD2) values ('D1', 1);
    insert into table2 (FLD1, FLD2) values ('D1', 2);
    insert into table2 (FLD1, FLD2) values ('D1', 3);
      

  6.   

     tb2没组都有1 然后显示tb1的fld2?
      

  7.   

    如果都确定是1的话 可以这么写create table tb1 (Fld1 varchar2(5),Fld2 number(10));
    insert into tb1 values ('D1',100);
    insert into tb1 values ('D2',200);create table tb2 (Fld1 varchar2(5),Fld2 number(10));
    insert into tb2 values ('D1',1);
    insert into tb2 values ('D1',2);
    insert into tb2 values ('D1',3);
    insert into tb2 values ('D2',1);
    insert into tb2 values ('D2',2);
    insert into tb2 values ('D2',3);select tb2.fld1,case when tb2.fld2=1 then tb1.fld2 else 0 end fld2
    from tb1,tb2
    where tb1.fld1=tb2.fld1
         fld1    fld2
    -------------------------
    1 D1 100
    2 D1 0
    3 D1 0
    4 D2 200
    5 D2 0
    6 D2 0
      

  8.   

    table2 也不确定,
    也可以是
    D1 1.33
    D1 1.32
    D1 1.45D2 1.5
      

  9.   

    那手动排序  是不是fld2最小的赋值为tb1.fld2呢?
      

  10.   

    select tb2.fld1,case when tb2.fld2=1 then tb1.fld2 else 0 end fld2
    from tb1,tb2
    where tb1.fld1=tb2.fld1把tb2.fld2值,固定为=1,不对。等于1只是一样演示例子。
      

  11.   

    create table table1 (
      FLD1 VARCHAR2(111),
      FLD2 NUMBER(20,2)
    )
    create table table2(
      FLD1 VARCHAR2(111),
      FLD2 NUMBER(20,2)
    )
    insert into table1 (FLD1, FLD2) values ('D1', 100);
    insert into table2 (FLD1, FLD2) values ('D1', 1);
    insert into table2 (FLD1, FLD2) values ('D1', 2);
    insert into table2 (FLD1, FLD2) values ('D1', 3);
    insert into table1 (FLD1, FLD2) values ('D2', 200);
    insert into table2 (FLD1, FLD2) values ('D2', 1);
    insert into table2 (FLD1, FLD2) values ('D2', 2);
    insert into table2 (FLD1, FLD2) values ('D2', 3);select t1.fld1,
           t2.fld2,
           decode(row_number() over(partition by t1.fld1 order by t2.fld2),
                  1,
                  t1.fld2,
                  0)
      from table1 t1, table2 t2
     where t1.fld1 = t2.fld1;FLD1                                                                                               FLD2 DECODE(ROW_NUMBER()OVER(PARTIT
    -------------------------------------------------------------------------------- ---------------------- ------------------------------
    D1                                                                                                 1.00                            100
    D1                                                                                                 2.00                              0
    D1                                                                                                 3.00                              0
    D2                                                                                                 1.00                            200
    D2                                                                                                 2.00                              0
    D2                                                                                                 3.00                              0
     
    6 rows selected
      

  12.   


    select tb2.fld1,tb2.fld2,case when row_number() over(partition by tb2.fld1 order by tb2.fld2)=1 then tb1.fld2 else 0 end fld2
    from tb1,tb2
    where tb1.fld1=tb2.fld1;
         fld1  fld2    fld2
    -------------------------
    1 D1 1.32 100
    2 D1 1.33 0
    3 D1 1.45 0
    4 D2 1.22 200
    5 D2 1.33 0
    6 D2 1.55 0
      

  13.   

    订单主表 table_order_mst 订单编号  订单类型    订单总金额  成本价  数量
      D1       折扣订单      10000     0        0
      D2       成本订单      20000     1000     10订单主表 table_order_det订单编号  数量  单价  金额     
      D1      4     1000  4000
      D1      6     1000  6000  D2      6     0     0
      D2      7     0     0最后得到:
    订单编号 订单类型  订单数量 订单单价  订单金额 
    D1       折扣订单  4        1000       4000
    D1       折扣订单  6        1000       6000D2       成本订单  6        0          20000
    D2       成本订单  7        0          0订单金额合计是 30000.
      

  14.   

    各位大佬,都理解简单了,tab1的fld2的值,不一定是1
      

  15.   

      或许剑走偏锋,走火入魔。
      换种简单写法,把折扣类订单写一个视图,成本类订单写一个视图,最后再写一个总金额视图,
      然后把三个视图union all一下,再排序就好了。
      

  16.   


    create table table_order_mst (订单编号 varchar2(20),订单类型 varchar2(20),订单总金额 number(10),成本价 number(10),数量 number(10));
    insert into table_order_mst values ('D1','折扣订单',10000,0,0);
    insert into table_order_mst values ('D2','成本订单',20000,1000,10);create table table_order_det (订单编号 varchar2(5),数量 number(10),单价 number(10),金额 number(10));
    insert into table_order_det values ('D1',4,1000,4000);
    insert into table_order_det values ('D1',4,1000,6000);
    insert into table_order_det values ('D2',6,0,0);
    insert into table_order_det values ('D2',7,0,0);  select tb2.订单编号,tb2.数量,tb2.单价,
           case when row_number() over(partition by tb2.订单编号 order by tb2.订单编号)=1 and tb2.金额=0 then tb1.订单总金额 else tb2.金额 end 金额
    from table_order_mst tb1,table_order_det tb2
    where tb1.订单编号=tb2.订单编号;   订单编号  数量   单价   金额
    ---------------------------------------------
    1 D1 4 1000 4000
    2 D1 6 1000 6000
    3 D2 6 0 20000
    4 D2 7 0 0
      

  17.   

    select table2.fld1,table2.fld2,
    decode(table2.fld2,1,table1.fld2,0)
    from table1,table2 
    where table1.fld1=table2.fld1;