  |  
  |  
 
Archives of the TeradataForum 
 
 
Message Posted: Wed, 12 Mar 2008 @ 23:45:41 GMT 
 
  
 
 
 
 
  
|  Subj:  |   |  Re: Can I avoid a product join?  |   
|     |   
|  From:  |   |  Dieter Noeth  |   
  
 
 
  
Bob Duell wrote: 
|     | Can anyone suggest an alternative technique?  I have lots of flexibility with the DEV_LOOKUP table (I own it), but the main CUSTOMER table
is outside my control. |     |  
 
  
Instead of Cross-Joining you might use OLAP-functions to assign the beg_serial_num to each serial_number: 
     SELECT
        b.model_num
     , COUNT(*) AS items_in_use
     FROM
       (
        SELECT
          serial_number
        , MAX(CASE WHEN x = 0 THEN serial_number END ) OVER
             (ORDER BY serial_number, x
              ROWS UNBOUNDED PRECEDING ) AS beg_serial_num
        FROM
         (
          SELECT
            1 AS x
          , serial_number
          FROM customer2 AS c
          UNION ALL
          SELECT
            0 AS x
          , beg_serial_num
          FROM DEV_LOOKUP
         ) AS dt
        QUALIFY x = 1
       ) AS a
     JOIN DEV_LOOKUP b
     ON a.beg_serial_num = b.beg_serial_num
     GROUP BY 1
 This is returning the same result as your BETWEEN join, but i'm too tired now to explain that approach in detail, maybe you should run it
step by step using some sample data. 
I just tested it using some small tables on my notebook, so i don't know if it's better than a cross join. At least it's more complicated and
there are more steps in explain ;-) 
 Dieter 
 
 
 
 
   
 
 |   |