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

Откуда: Москва
Сообщений: 1139
День добрый,

есть таблица с материалами. У каждого материала есть количество.
Нужно создать таблицу, у которой каждая строка повторяется нужное количество раз (см. картинку).

Сейчас я извращаюсь с курсором. Может как-то CTE такое умеет?

К сообщению приложен файл. Размер - 55Kb
15 ноя 12, 09:44    [13476242]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос (повторить строки нужное количество раз)  [new]
Добрый Э - Эх
Guest
Gena928,

CTE умеет. На форуме даже показывалось как именно она это умеет.
Искать по "CTE и популярные задачи форума"
15 ноя 12, 09:46    [13476255]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос (повторить строки нужное количество раз)  [new]
Добрый Э - Эх
Guest
но лучше по старинке - джойн на таблицу с числами...
15 ноя 12, 09:47    [13476259]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос (повторить строки нужное количество раз)  [new]
Gena928
Member

Откуда: Москва
Сообщений: 1139
Добрый Э - Эх
но лучше по старинке - джойн на таблицу с числами...


Спасибо, CTE поищу.

Просто интересно, а джойном как извратиться?
15 ноя 12, 09:49    [13476267]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос (повторить строки нужное количество раз)  [new]
Добрый Э - Эх
Guest
Gena928,

Про CTE

+ < Запрос с джойном на таблицу чисел:

--
-- Тестовый набор данных:
with
  tbl_materials (code, name, qnt) as
    (
      select 1, 'lopatka', 3 union all
      select 2,   'sovok', 2 union all
      select 3, 'pampers', 4
    )
--
-- Основной запрос:
select t.*
  from tbl_materials t
  join master.dbo.spt_values v
    on v.type = 'P' 
   and v.number < t.qnt;
15 ноя 12, 09:56    [13476310]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос (повторить строки нужное количество раз)  [new]
Gena928
Member

Откуда: Москва
Сообщений: 1139
Добрый Э - Эх,

ок, спасибо.
15 ноя 12, 10:00    [13476346]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос (повторить строки нужное количество раз)  [new]
Exproment
Member

Откуда:
Сообщений: 416
Gena928,
Я бы вот так сделал.
;with Materials(ID, name, Quantity) as (
	select 1523, 'Lopata', 3
	union all
	select 1524, 'Sovok', 2
	union all
	select 1525, 'Pampers', 4
	union all
	select 1526, 'Computer', 1
	union all
	select 1526, 'Printer', 0
),Recursion(ID, name, Quantity) as (
	select	M.ID
		,M.Name
		,Quantity = 1
	from	Materials M
	union all
	select	M.ID
		,M.Name
		,R.Quantity + 1
	from	Materials M 
			join Recursion R on M.ID = R.ID
	where	R.Quantity < M.Quantity 
)
select	* 
from	Recursion
order by Name
--если поле Quantity в теории может быть больше 100, надо указать msxrecurion
15 ноя 12, 10:01    [13476350]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос (повторить строки нужное количество раз)  [new]
Gena928
Member

Откуда: Москва
Сообщений: 1139
Exproment,

thanks
15 ноя 12, 10:24    [13476459]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос (повторить строки нужное количество раз)  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Gena928
День добрый,

есть таблица с материалами. У каждого материала есть количество.
Нужно создать таблицу, у которой каждая строка повторяется нужное количество раз (см. картинку).

Сейчас я извращаюсь с курсором. Может как-то CTE такое умеет?


Здесь можно просто кросджоином с условием сделать... Только желательно иметь табличку с последовательностью целых чисел от 1 до максимально возможного значения Quantity или выше... и запрос будет типа такого

select
	src.[Material code],
	src.[Material name],
	1 as Quantity
from tbl_Materials src join
(
	select 1 union all
	select 2 union all
	select 3 union all
	select 4 union all
	select 5 union all
	select 6 union all
	select 7 union all
	select 8
) num (i)
	on tbl.i <= src.Quantity
26 ноя 12, 16:12    [13530756]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос (повторить строки нужное количество раз)  [new]
VSVLAD
Member

Откуда: Краснодар
Сообщений: 1398
А я через WHILE не в стиле скуля, зато ясно и понятно
26 ноя 12, 16:28    [13530931]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить