sql查询逻辑
我有以下数据集 正如您所看到的,列a的第一个值是固定的(即1),但它从第二行拾取上一条记录的列c的值 b列的值是随机的,c列的值计算为c=a+b 我需要编写一个sql查询来选择上述格式的数据。我试着用滞后函数写,但没能实现 请帮忙 编辑: 列sql查询逻辑,sql,oracle,logic,lag,analytical,Sql,Oracle,Logic,Lag,Analytical,我有以下数据集 正如您所看到的,列a的第一个值是固定的(即1),但它从第二行拾取上一条记录的列c的值 b列的值是随机的,c列的值计算为c=a+b 我需要编写一个sql查询来选择上述格式的数据。我试着用滞后函数写,但没能实现 请帮忙 编辑: 列b仅存在于表中,a和c需要根据b的值进行计算 哈努马特 SQL> select a 2 , b 3 , c 4 from dual 5 model 6 dimension by (0
b
仅存在于表中,a和c
需要根据b
的值进行计算
哈努马特
SQL> select a
2 , b
3 , c
4 from dual
5 model
6 dimension by (0 i)
7 measures (0 a, 0 b, 0 c)
8 rules iterate (5)
9 ( a[iteration_number] = nvl(c[iteration_number-1],1)
10 , b[iteration_number] = ceil(dbms_random.value(0,10))
11 , c[iteration_number] = a[iteration_number] + b[iteration_number]
12 )
13 order by i
14 /
A B C
---------- ---------- ----------
1 4 5
5 8 13
13 8 21
21 2 23
23 10 33
5 rows selected.
问候,罗布 问候,
Rob.在不知道行之间的关系的情况下,我们如何计算前一行
a和b
列与当前行a列
的总和。我在表中又创建了两个列id和父列
,以查找两行之间的关系
parent
是告诉我们上一行的的列,而id
是该行的主键
create table test1 (a number ,b number ,c number ,id number ,parent number);
Insert into TEST1 (A, B, C, ID) Values (1, 2, 3, 1);
Insert into TEST1 (B, PARENT, ID) Values (6, 1, 2);
Insert into TEST1 (B, PARENT, ID) Values (4, 2, 3);
WITH recursive (a, b, c,rn) AS
(SELECT a,b,c,id rn
FROM test1
WHERE parent IS NULL
UNION ALL
SELECT (rec.a+ rec.b) a
,t1.b b
,(rec.a+ rec.b+t1.b) c
,t1.id rn
FROM recursive rec,test1 t1
WHERE t1.parent = rec.rn
)
SELECT a,b,c
FROM recursive;
带有关键字的定义了子查询的名称recursive
递归(a,b,c,rn)为
接下来是命名子查询的第一部分
选择a、b、c、id
从测试1开始
其中父项为空
命名子查询是两个查询的联合。这是第一个查询,定义了递归的起点。在我的connectby查询中,我想知道什么是start with记录
接下来是最令人困惑的部分:
SELECT (rec.a+ rec.b) a
,t1.b b
,(rec.a+ rec.b+t1.b) c
,t1.id rn
FROM recursive rec,test1 t1
WHERE t1.parent = rec.rn
这就是它的工作原理:
- 带查询:1。父查询将执行:
选择a、b、c
从递归代码>
- 这将触发命名子查询的执行。2子查询的联合中的第一个查询执行,给我们一个种子行开始递归:
选择a、b、c、id
从测试1开始
其中父项为空
在这种情况下,如果父项为null,则id=1的种子行将为空。从这里开始,让我们将种子行称为“新结果”,新结果的含义是我们还没有完成对它们的处理
- 子查询的联合中的第二个查询执行:
选择(rec.a+rec.b)a
,t1.b
,(rec.a+rec.b+t1.b)c
,t1.id-rn
来自递归rec,test1 t1
其中t1.parent=rec.rn
在不知道行之间的关系的情况下,我们如何计算前一行a和b
列与当前行a列
的总和。我在表中又创建了两个列id和父列
,以查找两行之间的关系
parent
是告诉我们上一行的的列,而id
是该行的主键
create table test1 (a number ,b number ,c number ,id number ,parent number);
Insert into TEST1 (A, B, C, ID) Values (1, 2, 3, 1);
Insert into TEST1 (B, PARENT, ID) Values (6, 1, 2);
Insert into TEST1 (B, PARENT, ID) Values (4, 2, 3);
WITH recursive (a, b, c,rn) AS
(SELECT a,b,c,id rn
FROM test1
WHERE parent IS NULL
UNION ALL
SELECT (rec.a+ rec.b) a
,t1.b b
,(rec.a+ rec.b+t1.b) c
,t1.id rn
FROM recursive rec,test1 t1
WHERE t1.parent = rec.rn
)
SELECT a,b,c
FROM recursive;
带有关键字的定义了子查询的名称recursive
递归(a,b,c,rn)为
接下来是命名子查询的第一部分
选择a、b、c、id
从测试1开始
其中父项为空
命名子查询是两个查询的联合。这是第一个查询,定义了递归的起点。在我的connectby查询中,我想知道什么是start with记录
接下来是最令人困惑的部分:
SELECT (rec.a+ rec.b) a
,t1.b b
,(rec.a+ rec.b+t1.b) c
,t1.id rn
FROM recursive rec,test1 t1
WHERE t1.parent = rec.rn
这就是它的工作原理:
- 带查询:1。父查询将执行:
选择a、b、c
从递归代码>
- 这将触发命名子查询的执行。2子查询的联合中的第一个查询执行,给我们一个种子行开始递归:
选择a、b、c、id
从测试1开始
其中父项为空
在这种情况下,如果父项为null,则id=1的种子行将为空。从这里开始,让我们将种子行称为“新结果”,新结果的含义是我们还没有完成对它们的处理
- 子查询的联合中的第二个查询执行:
选择(rec.a+rec.b)a
,t1.b
,(rec.a+rec.b+t1.b)c
,t1.id-rn
来自递归rec,test1 t1
其中t1.parent=rec.rn
您希望选择上述格式的数据或以该格式插入数据。如果它已经被插入,简单的select语句将给出结果。对不起,我的错误,结果应该如上所述被选择。现在只有b列需要计算a和c。我现在看到您的编辑,这就提出了一个问题:您希望按什么顺序处理行?您希望选择上述格式的数据,还是以该格式插入数据。如果它已经被插入,简单的select语句将给出结果。对不起,我的错误,结果应该如上所述被选择。现在只有b列需要计算a和c。我现在看到您的编辑,这就提出了一个问题,您希望按什么顺序处理行?