我具有以下數據集SQL查詢邏輯
a b c `1` 2 3 3 6 9 9 2 11
正如你可以看到列的第一個值是固定的(即1),而是從第二排它拿起的列c的值之前的紀錄。
b欄的值是隨機的和列c的值被計算爲C = A + B
我需要編寫一個SQL查詢,這將在選擇上述格式此數據。我試着用滯後函數寫作,但無法實現。
請幫忙。
編輯: 列b
存在於表只,a and c
需要爲其計算基礎上的b
值。
Hanumant
我具有以下數據集SQL查詢邏輯
a b c `1` 2 3 3 6 9 9 2 11
正如你可以看到列的第一個值是固定的(即1),而是從第二排它拿起的列c的值之前的紀錄。
b欄的值是隨機的和列c的值被計算爲C = A + B
我需要編寫一個SQL查詢,這將在選擇上述格式此數據。我試着用滯後函數寫作,但無法實現。
請幫忙。
編輯: 列b
存在於表只,a and c
需要爲其計算基礎上的b
值。
Hanumant
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.
問候,
羅布。
感謝您的回答! – hanumant 2012-07-20 13:26:32
不知道行之間的關係,我們如何計算前一行a and b
列與當前行a column
之和。我在表中創建了兩個column id and parent
來查找兩行之間的關係。
parent
是告訴我們關於previous row
的列,而id
是該行的primary key
。
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;
的WITH keyword
定義了名稱recursive
針對要遵循
AS
接着子查詢來到子命令的第一部分
SELECT a,b,c,id rn FROM test1 WHERE parent IS NULL
命名的子查詢是兩個查詢UNION ALL
。這是第一個查詢,它定義了遞歸的起點。就像在我的CONNECT BY查詢中一樣,我想知道記錄的起點是什麼。
接下來是這是最令人困惑的部分:
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。父查詢執行:
SELECT a,b,c FROM recursive;
SELECT a,b,c,id rn FROM test1 WHERE parent IS NULL
在這種情況下,種子行將是ID = 1有父一片空白。從這裏開始,我們將種子行稱爲「新結果」,從我們尚未完成處理的意義上來說,這是新的。
子查詢的聯盟第二查詢執行:
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語句會給你結果 – Tassadaque 2012-07-20 12:32:52
對不起,我的錯誤,結果應該如上選擇。只有b列存在a和c需要計算。 – hanumant 2012-07-20 12:34:41
我現在看到你的編輯,並提出了什麼樣的順序你想要你的行被處理的問題? – 2012-07-20 12:41:16