oracle sql 将一条记录复制拆分成多条,怎样按条件执行循环
我有一张表叫DEVICES,数据如下:IDDEVICE_NMDEVICE_QTYFLAG1DEVICE_A4Y2DEVICE_B1Y3DEVICE_C3N当DEVICE_...
我有一张表叫DEVICES,数据如下:
ID DEVICE_NM DEVICE_QTY FLAG
1 DEVICE_A 4 Y
2 DEVICE_B 1 Y
3 DEVICE_C 3 N
当DEVICE_QTY>1并且FLAG='Y'的时候,执行操作,将这条信息进行拆分为DEVICE_QTY条,并将数量置为1。
如以第一条ID=1为例:因为device_qty是4大于1,flag是Y,那么执行操作:将这条信息拆分成4条相同的信息,并且数量置为1,即执行后表中就是这样了:
ID DEVICE_NM DEVICE_QTY FLAG
1 DEVICE_A 1 Y
2 DEVICE_B 1 Y
3 DEVICE_C 3 N
4 DEVICE_A 1 Y
5 DEVICE_A 1 Y
6 DEVICE_A 1 Y
设备名为DEVICE_A的就有了4条记录。
我想用循环来实现这个操作,但是不知道怎么描写条件。或者有其他的方法也可以,谢谢大家! 展开
ID DEVICE_NM DEVICE_QTY FLAG
1 DEVICE_A 4 Y
2 DEVICE_B 1 Y
3 DEVICE_C 3 N
当DEVICE_QTY>1并且FLAG='Y'的时候,执行操作,将这条信息进行拆分为DEVICE_QTY条,并将数量置为1。
如以第一条ID=1为例:因为device_qty是4大于1,flag是Y,那么执行操作:将这条信息拆分成4条相同的信息,并且数量置为1,即执行后表中就是这样了:
ID DEVICE_NM DEVICE_QTY FLAG
1 DEVICE_A 1 Y
2 DEVICE_B 1 Y
3 DEVICE_C 3 N
4 DEVICE_A 1 Y
5 DEVICE_A 1 Y
6 DEVICE_A 1 Y
设备名为DEVICE_A的就有了4条记录。
我想用循环来实现这个操作,但是不知道怎么描写条件。或者有其他的方法也可以,谢谢大家! 展开
推荐于2016-06-09 · 知道合伙人数码行家
关注
展开全部
用oracle start with connect by 可以实现。
oracle start with connect by 用法oracle 提供了start with connect by 语法结构可以实现递归查询。
1. 一个简单举例:
SQL> select * from test;
BILL_MONTH DAY_NUMBER MSISDN
-------------------- ---------- --------------------
200803 1 13800
200803 3 13800
200803 2 13800
200803 2 13801
200803 4 13804
200803 5 13804
200803 7 13804
200803 8 13804
200803 6 13802
200803 6 13801
200803 7 13801
200803 8 13801
12 rows selected
SQL> select * from test
2 start with day_number=1
3 connect by prior day_number=day_number-1 and prior msisdn= msisdn
4 ;
BILL_MONTH DAY_NUMBER MSISDN
-------------------- ---------- --------------------
200803 1 13800
200803 2 13800
200803 3 13800
上面的语句查找出了从1开始,并且day_number 逐渐+1 递增的,并且 msisdn 相同的哪些个数据.
oracle start with connect by 用法oracle 提供了start with connect by 语法结构可以实现递归查询。
1. 一个简单举例:
SQL> select * from test;
BILL_MONTH DAY_NUMBER MSISDN
-------------------- ---------- --------------------
200803 1 13800
200803 3 13800
200803 2 13800
200803 2 13801
200803 4 13804
200803 5 13804
200803 7 13804
200803 8 13804
200803 6 13802
200803 6 13801
200803 7 13801
200803 8 13801
12 rows selected
SQL> select * from test
2 start with day_number=1
3 connect by prior day_number=day_number-1 and prior msisdn= msisdn
4 ;
BILL_MONTH DAY_NUMBER MSISDN
-------------------- ---------- --------------------
200803 1 13800
200803 2 13800
200803 3 13800
上面的语句查找出了从1开始,并且day_number 逐渐+1 递增的,并且 msisdn 相同的哪些个数据.
展开全部
declare @qty,@i;
set @i=0;
set @qty =(select qty from DEVICES where DEVICE_QTY>1 and FLAG='Y')
while @i<isnull(@qty, 0)
begin
insert
@i = @i +1
end
大概就是这个意思
set @i=0;
set @qty =(select qty from DEVICES where DEVICE_QTY>1 and FLAG='Y')
while @i<isnull(@qty, 0)
begin
insert
@i = @i +1
end
大概就是这个意思
更多追问追答
追问
报错了 ORA-06550: line 3, column 3: PLS-00103: Encountered the symbol "=" when expecting one of the following:
追答
这是Sql Server的写法,你自己根据实际修改成Oracle的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询