में बयान "पुनरावर्ती के साथ" मैं Teradata में एक पुनरावर्ती दृश्य बनाने के लिए चाहते हैं (यानी, CREATE RECURSIVE VIEW
) निम्नलिखित प्रतिलिपि प्रस्तुत करने योग्य उदाहरण से:है कि एक पुनरावर्ती दृश्य बनाएँ एक Teradata
CREATE VOLATILE TABLE vt1
(
foo VARCHAR(10)
, counter INTEGER
, bar INTEGER
)
ON COMMIT PRESERVE ROWS;
INSERT INTO vt1 VALUES ('a', 1, '1');
INSERT INTO vt1 VALUES ('a', 2, '2');
INSERT INTO vt1 VALUES ('a', 3, '2');
INSERT INTO vt1 VALUES ('a', 4, '4');
INSERT INTO vt1 VALUES ('a', 5, '1');
INSERT INTO vt1 VALUES ('b', 1, '3');
INSERT INTO vt1 VALUES ('b', 2, '1');
INSERT INTO vt1 VALUES ('b', 3, '1');
INSERT INTO vt1 VALUES ('b', 4, '2');
WITH RECURSIVE cte (foo, counter, bar, rsum) AS
(
SELECT
foo
, counter
, bar
, bar AS rsum
FROM
vt1
QUALIFY ROW_NUMBER() OVER (PARTITION BY foo ORDER BY counter) = 1
UNION ALL
SELECT
t.foo
, t.counter
, t.bar
, CASE WHEN cte.rsum < 3 THEN t.bar + cte.rsum ELSE t.bar END
FROM
vt1 t JOIN cte ON t.foo = cte.foo AND t.counter = cte.counter + 1
)
SELECT
cte.*
, CASE WHEN rsum < 5 THEN 0 ELSE 1 END AS tester
FROM
cte
ORDER BY
foo
, counter
;
यह इस उत्पादन बनाता है:
╔═════╦═════════╦═════╦══════╦════════╗
║ foo ║ counter ║ bar ║ rsum ║ tester ║
╠═════╬═════════╬═════╬══════╬════════╣
║ a ║ 1 ║ 1 ║ 1 ║ 0 ║
║ a ║ 2 ║ 2 ║ 3 ║ 0 ║
║ a ║ 3 ║ 2 ║ 5 ║ 1 ║
║ a ║ 4 ║ 4 ║ 4 ║ 0 ║
║ a ║ 5 ║ 1 ║ 5 ║ 1 ║
║ b ║ 1 ║ 3 ║ 3 ║ 0 ║
║ b ║ 2 ║ 1 ║ 4 ║ 0 ║
║ b ║ 3 ║ 1 ║ 5 ║ 1 ║
║ b ║ 4 ║ 2 ║ 2 ║ 0 ║
╚═════╩═════════╩═════╩══════╩════════╝
जो मैं अंततः एक दृश्य के रूप में "सहेजना" पसंद करूंगा। मैंने CREATE RECURSIVE VIEW
और कई रूपों का प्रयास किया है, लेकिन मुझे लगता है कि मैं समझ नहीं पा रहा हूं कि WITH RECURSIVE cte
कथन के आसपास कैसे जाना है।
एक संबंधित सवाल को समझने के लिए के लिए क्या हो रहा है,, this question
वाक्यविन्यास 'रिकर्सिव व्यू बनाएं ....'। यहां दस्तावेज़ों का एक लिंक दिया गया है: http://www.info.teradata.com/HTMLPubs/DB_TTU_13_10/index.html#page/SQL_Reference/B035_1144_109A/Create_Procedure-Syntax.06.77.html#ww10851072 – Andrew