Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создание заданного в колонке числа строк  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Есть вот такая таблица.
DECLARE @table table(Id int, Value float, SplitCount int);

INSERT INTO @table
VALUES(1, 100.0, 2), (2, 3600.0, 3)

SELECT * FROM @table

Id Value SplitCount
1 100 2
2 3600 3


Нужно создать таблицу с количеством строк SplitCount и значением Value/SplitCount, т.е.
Id Value SplitCount
1 50.0 2
1 50.0 2
2 1200.0 3
2 1200.0 3
2 1200.0 3

Пока, кроме курсора, ничего в голову не приходит.
Подскажите идею.
10 янв 13, 20:15    [13749876]     Ответить | Цитировать Сообщить модератору
 Re: Создание заданного в колонке числа строк  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
DECLARE @table table(Id int, Value float, SplitCount int);

INSERT INTO @table
VALUES(1, 100.0, 2), (2, 3600.0, 3)

;with n as
(
 select top (1000)
  row_number() over (order by (select 1)) as n
 from
  master..spt_values a cross apply
  master..spt_values b
)
select
 t.id, t.Value / t.SplitCount, t.SplitCount
from
 @table t join
 n on n.n <= t.SplitCount
order by
 id;

Лучше завести себе в БД таблицу с числами.
10 янв 13, 20:25    [13749925]     Ответить | Цитировать Сообщить модератору
 Re: Создание заданного в колонке числа строк  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Если под рукой нет готовой таблички с числами от 1 (0) до N, то:

SELECT 
  T.Id,
  T.Value / T.SplitCount,
  T.SplitCount 
FROM 
  @table T 
  INNER JOIN
  (SELECT 
     Number
   FROM 
     master..spt_values WHERE type = 'P') Q ON
   T.SplitCount > Q.number
10 янв 13, 20:25    [13749926]     Ответить | Цитировать Сообщить модератору
 Re: Создание заданного в колонке числа строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47107
DECLARE @table table(Id int, Value float, SplitCount int);

INSERT INTO @table
VALUES(1, 100.0, 2), (2, 3600.0, 3)

SELECT * FROM @table

SELECT *, T.[Value]/T.SplitCount
FROM @table T
JOIN master.dbo.spt_values V ON V.[type]='P' AND V.[number]<T.SplitCount;
10 янв 13, 20:27    [13749935]     Ответить | Цитировать Сообщить модератору
 Re: Создание заданного в колонке числа строк  [new]
qwerty112
Guest
;with cte as
(select Id, Value/SplitCount as result, 1 as num 
from @table

union all

select cte.Id, cte.result, cte.num + 1
from cte inner join @table t on cte.Id=t.Id
where cte.num + 1 <= t.SplitCount)

select * from cte order by 1, 3
10 янв 13, 20:35    [13749959]     Ответить | Цитировать Сообщить модератору
 Re: Создание заданного в колонке числа строк  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Ok, всем спасибо!
Что-то под конец дня стал туго соображать.
10 янв 13, 20:51    [13750008]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить