![]()  |  
 
 
 | 
Archives of the TeradataForumMessage Posted: Thu, 29 Jun 2006 @ 09:50:11 GMT
 
 Anomy, How about a recursive query? 
     CREATE SET TABLE mytable
          (
           col1 INTEGER,
           col2 INTEGER)
     PRIMARY INDEX ( col1 );
     insert into mytable(2,200);
     insert into mytable(6,10);
     insert into mytable(9,400);
     insert into mytable(13,60);
     WITH RECURSIVE r (col1, col2, col3) AS
     (
     SELECT 0, c.col2, c.col1 -1
     FROM mytable c
     WHERE c.col1 IN
      (
     SELECT MIN(col1)
     FROM mytable)
     UNION ALL
     SELECT a.col1, a.col2, b.col1 - 1
     FROM mytable a, mytable b
     WHERE b.col1 IN
      (
     SELECT MIN(col1)
     FROM mytable
     WHERE col1 > a.col1)
     UNION ALL
     SELECT d.col1, d.col2, d.col1
     FROM mytable d
     WHERE d.col1 IN
      (
     SELECT MAX(col1)FROM mytable)
     UNION  ALL
     SELECT rgen.col1+1, rgen.col2, rgen.col3
     FROM r rgen
     Where rgen.col1  < rgen.col3
     )
     SELECT DISTINCT col1, col2
     FROM r
     ORDER BY 1
     ;
Returns.... 
      0     200
      1     200
      2     200
      3     200
      4     200
      5     200
      6      10
      7      10
      8      10
      9     400
     10     400
     11     400
     12     400
     13      60
The DISTINCT in the final select prevents two rows with a 0 in col1 if your data has a 0 row in col1. The query assumes the input does not have multiple col2 values for the same col1 value. etc. Mark 
  | ||||||||||||||||||||||||||||||||||||||||||||||||
|   | ||||||||||||||||||||||||||||||||||||||||||||||||
 
  | ||||||||||||||||||||||||||||||||||||||||||||||||
|  
 | ||||||||||||||||||||||||||||||||||||||||||||||||
| Copyright 2016 - All Rights Reserved | ||||||||||||||||||||||||||||||||||||||||||||||||
| Last Modified: 15 Jun 2023 | ||||||||||||||||||||||||||||||||||||||||||||||||