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

Откуда: Москва
Сообщений: 2646
Два параметра
SELECT 10003,  5, 'P'   -- номер и кол-во, буква.

Нужно получить один столбец, вида.
select 10004
select P10005
select P10006
select P10007
select P10008

Т.е. плюс 1 и размножить.
24 ноя 11, 19:02    [11654430]     Ответить | Цитировать Сообщить модератору
 Re: ms sql 2008r2 Размножить строку  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
trew,
Ошибся, три параметра и результат

select P10004
select P10005
select P10006
select P10007
select P10008
24 ноя 11, 19:03    [11654436]     Ответить | Цитировать Сообщить модератору
 Re: ms sql 2008r2 Размножить строку  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
select number
  from master..spt_values 
 where type = 'P'
   and number < @F2
24 ноя 11, 19:08    [11654468]     Ответить | Цитировать Сообщить модератору
 Re: ms sql 2008r2 Размножить строку  [new]
fabulaspb
Member

Откуда: Санкт-Петербург
Сообщений: 34
Если предположить, что количество не может быть больше 99, то:

SELECT letter + CONVERT(varchar, (num+1+number)) as res FROM
   (SELECT 10003 as num, 5 as qty, 'P' as letter) AS tmp,
   (SELECT 10*a+b as number FROM
     (SELECT 0 AS a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) as a,
     (SELECT 0 AS b UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) as b
   ) as numbers
WHERE number < 5
24 ноя 11, 19:14    [11654509]     Ответить | Цитировать Сообщить модератору
 Re: ms sql 2008r2 Размножить строку  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Количество больше 99 :)

Сделал так. Первоначально упростил задачу, не стал писать что длина должна быть 10 знаков.
declare @d int
declare @num_max int
declare @bukva varchar(1)

set @d=10
set @num_max =1003
set @bukva ='P'

;with c as(
select 1 d
union all
select d+1
from c where d<@d
)
select @bukva + convert(varchar(8),REPLICATE(0,9-len(@num_max+d))) + convert(varchar(8),@num_max+d) from c
Спасибо всем участникам.
24 ноя 11, 19:19    [11654539]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить