物料表:
id   name
----------
001  物料1
002  物料2仓库表:
sid  id  qty
------------
01   001  2
02   001  3
03   001  5
01   002  1
02   002  2
03   002  4我期望的查询结果是:
id   name  sid  qty
--------------------
001  物料1  01   2
            02   3
            03   5
002  物料2  01   1
            02   2
            03   4求各位指点谢谢!

解决方案 »

  1.   

    抱歉,显示的效果和编辑时有出入,结果中02,03是sid下面的。
      

  2.   

    with t1 as(
    select '001' id, '物料1' name from dual union all
    select '002', '物料2' from dual)
    ,t2 as(
    select '01' sid, '001' id, 2 qty from dual union all
    select '02', '001', 3 from dual union all
    select '03', '001', 5 from dual union all
    select '01', '002', 1 from dual union all
    select '02', '002', 2 from dual union all
    select '03', '002', 4 from dual)select t1.id ,t1.name,t2.sid,t2.qty from t1 full join t2 on t1.id=t2.id and sid ='01'
      

  3.   

    物料表:t_wuliao
    仓库表:t_cangku
      

  4.   

    谢谢xpingping,跟我想要的想过差不多,但还是有一点差异:
    ID  NAME  SID        QTY
    --- ----- --- ----------
    001 物料1 01          2
    002 物料2 01          1
              02          3
              03          5
              02          2
              03          4
      

  5.   

    t1 物料表:t_wuliao
    t2 仓库表:t_cangkuselect t1.id ,t1.name,t2.sid,t2.qty 
    from t_wuliao t1 full join t_cangku t2 
    on t1.id=t2.id and t2.sid ='01'
      

  6.   

    这样试试……
    select t1.id ,t1.name,t2.sid,t2.qty 
    from (select * from t_wuliao order by id asc)t1 
    full join 
    (select * from t_cangku  order by id,sid asc)t2
    on t1.id=t2.id and t2.sid ='01'
      

  7.   

    CREATE TABLE products
    (
           ID VARCHAR2(10),
           NAME VARCHAR2(20)
    );CREATE TABLE base
    (
           SID VARCHAR2(10),
           ID VARCHAR2(10),
           QTY NUMBER
    );WITH CTE
    AS
    (
    SELECT P.ID , P.NAME,B.SID,B.QTY ,ROWNUM RM FROM PRODUCTS P ,BASE B
    WHERE P.ID =B.ID
    )
    SELECT ID,NAME,SID,QTY FROM
    (
    SELECT C.ID,C.NAME,C.SID,C.QTY ,c.rm
    FROM CTE C WHERE C.RM =1
    UNION 
    SELECT CASE T.ID WHEN C.ID THEN '' ELSE C.ID END ID,C.NAME,C.SID,C.QTY ,c.rm
    FROM CTE C , CTE T WHERE C.RM = T.RM +1
    )
    ORDER BY rm;
    1 001 物料1 01 2
    2 物料1 02 3
    3 物料1 03 5
    4 002 物料2 "01
    " 1
    5 物料2 02 2
    6 物料2 03 4
      

  8.   

    物料一样的调整一下就可以了,参考:WITH CTE
    AS
    (
    SELECT P.ID , P.NAME,B.SID,B.QTY ,ROWNUM RM FROM PRODUCTS P ,BASE B
    WHERE P.ID =B.ID
    )
    SELECT ID,NAME,SID,QTY FROM
    (
    SELECT C.ID,C.NAME,C.SID,C.QTY ,c.rm
    FROM CTE C WHERE C.RM =1
    UNION 
    SELECT CASE T.ID WHEN C.ID THEN '' ELSE C.ID END ID, CASE T.NAME WHEN C.NAME THEN '' ELSE C.NAME END NAME,C.SID,C.QTY ,c.rm
    FROM CTE C , CTE T WHERE C.RM = T.RM +1
    )
    ORDER BY rm
      

  9.   


    select decode(rn,1,id,null) id  ,decode(name,1,name,null) name ,sid,qty from 
    (select a.id,name,sid,qty , row_number()over(partition by a.id order by a.id,sid) rn from wuliao a,cangku b where a.id=b.id order by a.id,sid)
    你这属于数据的排版问题了,通常都是放在应用层来做的,放在数据库里来做是会影响你取数据的速度的
    如果你是在sqlplus里需要这样的排班查询是非常容易实现的不需要用到分析函数,但你要得到排版效果的查询就只有用分析函数了
      

  10.   


    select decode(rn,1,id,null) id  ,decode(rn,1,name,null) name ,sid,qty from 
    (select a.id,name,sid,qty , row_number()over(partition by a.id order by a.id,sid) rn 
      from wuliao a,cangku b where a.id=b.id order by a.id,sid)
    上面decode(name,1,name,null) name修改成decode(rn,1,name,null) name
      

  11.   

    请教mailking,怎样在业务层处理呢,我只是想在页面上如此显示罢了,没有更多的用意。
      

  12.   

    通过sql抓出来的datasource直接可以绑定,为什么要外部程序还来处理??
    那是不是排序的工作也丢给外围应用程序处理呢????