2013-11-18 4 views
0

Мне нужна помощь в генерации результата SQL на основе значения столбца для вычисления суммы в день.Нужно повторить строки результатов на основе значения столбца

У меня есть SQL, как показано ниже.

select guid, reccharge, dayCareDaysCharged, dayCareHoursPerDay, RATE from tableA. 

Вот если reccharge = 0 (еженедельно), то результат должен иметь 7 строк со скоростью, как скорость/7 для каждой строки (в расчете на количество дней); , если перезарядка = 1 (ежемесячно), то результат должен иметь 30 строк с RATE в качестве RATE/30 для каждой строки; , если перезарядка = 2 (ежегодно), тогда результат должен иметь 365 строк с RATE в качестве RATE/365 для каждой строки; если перезарядка = 3 (почасовая), тогда должна быть строка, рассчитанная на день;

Как я могу достичь этого. Пожалуйста помоги.

+0

Каков тип данных «перезарядки»? Сначала я предположил, что он был числовым, со значением '0' и' (еженедельно) 'был вашим комментарием об этом значении, - но затем вы даете ежемесячный пример, где он также равен 0? Значит, это значение (в вашем первом примере) '0' или' 0 (еженедельно) '? –

+0

извините. Для месяца значение равно 1. Ошибочно я ставлю его равным 0. Тип данных является числовым. – user3004115

+0

Вы можете отредактировать свой вопрос - я бы порекомендовал вам сделать это сейчас, чтобы исправить пример - есть ссылка для редактирования чуть ниже тегов. –

ответ

0

Я не идея, чтобы сделать это в одном запросе, но вы можете сделать это с помощью курсора, как, как показано ниже:

declare @reccharge int 
declare @count int 
declare @i int 
declare @strSQL nvarchar(max) = 'select 1, 1 where 1 <> 1' 

declare CurTest cursor for select reccharge from test 

open CurTest 
fetch next from CurTest into @reccharge 

while @@fetch_status = 0 
begin 
    set @i = 0; 

    select @count = case when @reccharge = 0 then 7 when @reccharge = 1 then 30 when @reccharge = 2 then 365 else 1 end 

    while @i < @count 
    begin 
     set @strSQL = @strSQL + ' union all select reccharge, Rate/' + cast(@count as varchar(10)) + ' from test where reccharge = ' + cast(@reccharge as varchar(10)) 
     set @i = @i + 1; 
    end 

fetch next from CurTest into @reccharge 
end 

close CurTest 
deallocate CurTest 

exec(@strSQL) 
0

Вопрос кажется немного странным для меня, но если я последовал за ним правильно, возможно, это;

CREATE TABLE [#temp1] (reccharge tinyint,rdays smallint) 
    GO 
    declare @rcount smallint 
    set @rcount=0 
    while @rcount<7 
    begin 
    set @[email protected]+1 
    insert #temp1 values (0,7) 
    end 
    set @rcount=0 
    while @rcount<30 
    begin 
    set @[email protected]+1 
    insert #temp1 values (1,30) 
    end 
    set @rcount=0 
    while @rcount<365 
    begin 
    set @[email protected]+1 
    insert #temp1 values (2,365) 
    end 
    insert #temp1 values (3,1) 
    GO 

    select t1.[guid], t1.reccharge, t1.dayCareDaysCharged, t1.dayCareHoursPerDay, t1.RATE/t2.rdays as RATE from tableA t1 
    inner join #temp1 t2 on t1.reccharge=t2.reccharge 
    order by t1.[guid] 
Смежные вопросы