Home Forums SQL Server 2005 T-SQL (SS2K5) How to multiply rows in one table based on the value on another table RE: How to multiply rows in one table based on the value on another table

  • Got it 🙂

    First we need a table function which returns all integers between x and y (the function is stolen from somewhere, don't remember where...):

    create function [dbo].[f_table_numbers] (@st bigint, @end bigint)

    returns table

    as

    return

    with

    a as (select convert(bigint,0) as n union all select 0),

    b as (select 0 as n from a as a cross join a as b),

    c as (select 0 as n from b as a cross join b as b),

    d as (select 0 as n from c as a cross join c as b),

    e as (select 0 as n from d as a cross join d as b),

    f as (select 0 as n from e as a cross join e as b),

    nums as (select row_number() over (order by (select 1)) as num from f as a cross join f as b)

    select @st + num - 1 as num

    from nums

    where num <= @end-@st+1

    Then my table function:

    create function Temp (@Id int, @N int)

    returns @t table (Id int)

    as

    begin

    insert into @t (Id)

    select x.Id

    from (select @Id Id) x cross join (select Num from dbo.f_table_numbers(1, @N)) y

    return

    end

    Test:

    declare @t1 table (Id int)

    insert into @t1 (Id)

    select 1 union select 2 union select 3

    declare @t2 table (Id int, X int)

    insert into @t2 (Id, X)

    select 1, 10 union

    select 2, 5 union

    select 3, 0

    ;with temp as (

    select t1.Id, t2.X

    from @t1 t1 join @t2 t2 on (t1.Id = t2.Id)

    )

    select t1.Id

    from temp t1 cross apply dbo.Temp(t1.Id, t1.X)

    Edit - talking to my self, sorry, if this is agains some rules you can delete the topic...