日期:2014-05-17  浏览次数:21115 次

Oracle业务题,高分悬赏答案
SQL code

--庫別表
create table lm_sic_def
(
sic varchar2(10) not null,--庫別
repair_times number(3)--維修类型,结果为1或2,也可能为空,1代表1修,2代表2修。
)
--单据表
create table wip_bill_in_master
(
company varchar2(10) not null,--投递公司编号
bill_No varchar2(50) not null,--投递EK單编号
sic varchar2(10),--库别
part_No varchar2(20) not null,--物料編號
last_sign_date date not null, --投递日期
status varchar2(5) not null,--EK单的状态,C表示已完结
repair_times number(2)--维修类型,(该字段为第一题新增的字段)
)
--投递详细信息表
create table wip_in_out_info
(
sn varchar2(10) not null,--序列号
in_corp varchar2(10) not null,--投递公司编号
in_bill_no varchar2(50) not null,--投递EK单编号
in_bill_pn varchar2(20) not null,--物料编号
out_attr varchar2(5) not null,--入库状态,G为好库,B为坏库
repair_status varchar2(5) not null--板子的维修状态
)
--物料信息表
create table mgs_pn
(
part_no varchar2(20) not null,--物料编号
BU_CATEGORY varchar2(30) not null,--物料种类
division varchar2(10) not null,--物料部门,(表示A种类的物料分配到B部门,B种类的物料分配到C,C

种类的物料分配到A部门,这个字段只是一个编号引用物料部门表)
)
--表关系如下面语句
select * from  wip_bill_in_master a,wip_in_out_info b,mgs_pn c
where a.company=b.in_corp and a.bill_no=b.in_bill_no and a.part_no=b.in_bill_pn and 

a.part_no=c.part_no
--业务说明:1.公司进行一部分维修业务,工程師所維修的板子都是由库房領出以EK单投递之后流入到工程

師的手中,工程師经过維修把維修好的板子入好库,未維修好的板子入坏库。工程師被分为兩組(1修工程

師,2修工程師),1修工程師對首次來的板子进行简单的維修,2修工程師对难板進行維修。
--2.投递的EK单按库别分為1修和2修,表lm_sic_def 定义所有的库别,SIC为库别,REPAIR_TIMES為維修类

型。
--3.投递的单据保存在表wip_bill_in_master中,根据库別定义可以得出某一投递的EK单属于1修還是2修。

其中status='C'表明此EK单以完結。表wip_in_out_info记录了投递的具体信息,每一条记录记录了一片板

子。其中out_attr表明入库的状态‘G’表明入好库‘B’表明入坏库。repair_status表明该板子的維修状

态。SN 为板子的序列号。
--4.表mgs_pn 記錄了所有物料的信息


问题一:
EK单維修次数字段REPAIR_TIMES已經在表wip_bill_in_master中添加,但是值为空。请用兩种方式产生

REPAIR_TIMES的值。
(这题也就是根据wip_bill_in_master表与lm_sic_def表的库别关系将lm_sic_def表的REPAIR_TIMES修改到

wip_bill_in_master表中)
这题我已写出一条语句
SQL code

--解1:
update wip_bill_in_master m set m.repair_times = (select d.repair_times from lm_sic_def d 

where m.sic = d.sic and rownum=1)
where exists (select 1 from lm_sic_def d where d.sic = m.sic)
--第2种写法靠大家了
--解2:?


问题二:
按照BU_CATEGORY,division计算2006年1至5月每月的維修达成率報表。
維修达成率=入好庫的数量/投入的总数
{计算1修2修投递的EK单且EK单已完結,時間按LAST_SIGN_DATE(wip_bill_in_master)計算,

wip_in_out_info.repair_status in ('G','H')的板子進行统计,其他状态不計算
SQL code

--题2查询结果如下格式,如:
BU_CATEGORY    DIVISION    MONTH    FIRST_RATE    SECOND_RATE
  CSBU        MIC        042006    83            0
  CSBU        MIC        052006    8            23
  CSBU        MIC        062006    7            15
  CSBU        MIC        072006    73            34
  ESBU        MIC        042006    76            37
  ESBU        MIC        052006    72            23
  ESBU        MIC        062006    73            13
  ESBU        MIC        072006    74            18
  MBU        MIC        042006    5            0
  MBU        MIC        062006    63            0
  PBU        MTC        042006    78            52    
  PBU        MTC        052006    78            3
  PBU        MTC        062006    72            0
  PBU        MTC        072006    77            0
  WBU        MDS        042006    0            41
  WBU        MDS        072006    0            95


大神们,高分求答案在线等啊,这个业务题已经难倒我了,再搞不出来,老板就要开除我了,我Oracle才刚刚开始学

,求高手...生死尽在各位手中了...

------解决方案--------------------
--第2种写法靠大家了
--解2:?

MERGE INTO wip_bill_in_master m
USING lm_sic_def d
ON (d.sic = m.sic)
WHEN MATCHED THEN
UPDATE
SET m.repair_times =d.repair_times;

就这一个问题吗?
在ORACLE中不用SQL能查询数据吗?解决办法