A SQL query question for oracle。

AslenG 2012-03-27 11:04:41
物料表:
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

求各位指点谢谢!
...全文
108 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
AslenG 2012-03-28
  • 打赏
  • 举报
回复
请教mailking,怎样在业务层处理呢,我只是想在页面上如此显示罢了,没有更多的用意。
「已注销」 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
界面如何排版显示这个是程序编码人员的事了。这个对于程序员来说应该是非常简单的了
[/Quote]


通过sql抓出来的datasource直接可以绑定,为什么要外部程序还来处理??
那是不是排序的工作也丢给外围应用程序处理呢????
mailking 2012-03-28
  • 打赏
  • 举报
回复
界面如何排版显示这个是程序编码人员的事了。这个对于程序员来说应该是非常简单的了
mailking 2012-03-27
  • 打赏
  • 举报
回复

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
mailking 2012-03-27
  • 打赏
  • 举报
回复

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里需要这样的排班查询是非常容易实现的不需要用到分析函数,但你要得到排版效果的查询就只有用分析函数了
「已注销」 2012-03-27
  • 打赏
  • 举报
回复
物料一样的调整一下就可以了,参考:

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
「已注销」 2012-03-27
  • 打赏
  • 举报
回复
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
xpingping 2012-03-27
  • 打赏
  • 举报
回复
这样试试……
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'
xpingping 2012-03-27
  • 打赏
  • 举报
回复
t1 物料表:t_wuliao
t2 仓库表:t_cangku

select 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'
AslenG 2012-03-27
  • 打赏
  • 举报
回复
谢谢xpingping,跟我想要的想过差不多,但还是有一点差异:
ID NAME SID QTY
--- ----- --- ----------
001 物料1 01 2
002 物料2 01 1
02 3
03 5
02 2
03 4
AslenG 2012-03-27
  • 打赏
  • 举报
回复
物料表:t_wuliao
仓库表:t_cangku
xpingping 2012-03-27
  • 打赏
  • 举报
回复
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'
AslenG 2012-03-27
  • 打赏
  • 举报
回复
抱歉,显示的效果和编辑时有出入,结果中02,03是sid下面的。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧