我正在研究Oracle 12.c企业版(12.1.0.2.0)。
我想构造一个随机的行数(在4到15行之间)-称为DataSet-使用2个随机的行(在1-30之间)-称为FixedSed ...
...并希望2个FixedSet数据(val1和val2)在数据集中是恒定的。
with DataSet as
(
select level Ident
, trunc(dbms_random.value(0,1)*100)-10 val
from dual
CONNECT BY level <= dbms_random.value(4, 15)
)
, FixedSet as
(
select trim(trunc(dbms_random.VALUE(1, 30))) val1
, trim(trunc(dbms_random.VALUE(1, 30))) val2
from dual
)
select *
from DataSet, FixedSet
例如:
IDENT VAL VAL1 VAL2
1 -1 6 13
2 78 6 5
3 68 7 22
4 86 19 29
5 37 15 8
6 -1 8 18
7 0 1 21
8 77 24 19
9 18 15 13
10 4 13 28
11 70 7 29
我希望我得到类似的东西:
IDENT VAL VAL1 VAL2
1 -1 6 13
2 78 6 13
3 68 6 13
4 86 6 13
5 37 6 13
6 -1 6 13
7 0 6 13
8 77 6 13
9 18 6 13
10 4 6 13
11 70 6 13
所有这些的目的是当val为负时返回val1,如果为正则返回val2 ...
我应该改变什么? 谢谢。
答案 0 :(得分:1)
如果您想要每FixedSet
行的DataSet
恒定值
with FixedSet as
(
select level lfs, trim(trunc(dbms_random.VALUE(1, 30))) val1
, trim(trunc(dbms_random.VALUE(1, 30))) val2
from dual
connect by level <=1
)
, DataSet as
(
select level Ident
, trunc(dbms_random.value(0,1)*100)-10 val
from dual
CONNECT BY level <= dbms_random.value(4, 15)
)
select *
from DataSet, FixedSet;
答案 1 :(得分:1)
替代方法是将val1和val2添加为列定义的一部分
with DataSet as
(
select level Ident
, trunc(dbms_random.value(0,1)*100)-10 val
from dual
CONNECT BY level <= dbms_random.value(4, 15)
)
select t.*
,(select dbms_random.value(1,30) from dual) as val1
,(select dbms_random.value(1,30) from dual) as val2
from DataSet t
https://dbfiddle.uk/?rdbms=oracle_18&fiddle=9bd7e8952ce27be660c294069d6afe21