Рейтинг:
10
CHill60
Чтобы сгенерировать последовательность см. Генерация последовательности в SQL[^]
Для первого столбца [книга нет] используйте столбец идентификаторов:
CREATE TABLE Book
(
[Book No] int identity(1,1),
[Receipt No] varchar(9)
)
Для второго столбца используйте средства генерации последовательности, отформатируйте ее (кстати, это плохая практика) и вставьте в таблицу вот так
;WITH q AS
(
SELECT 1 AS num
UNION ALL
SELECT num + 50
FROM q
WHERE num < 9000 - 49
)
INSERT INTO Book
SELECT FORMAT(num,'000#') + '-' + FORMAT(num + 49, '000#') -- SQL 2012 or greater
--SELECT RIGHT('0000'+CAST(num AS VARCHAR(4)),4) + '-' + RIGHT('0000'+CAST(num + 49 AS VARCHAR(4)),4) -- SQL 2008 or earlier
FROM q
OPTION (MAXRECURSION 180) -- 900 / 50
Примечание. Если вы используете версию SQL ранее 2012 года, вам нужно будет заменить последний выбор на тот, который указан в комментарии.
[Отредактировано, чтобы убедиться, что максимальное число равно 9000, а не 9049]
[EDIT 2] OP пересмотрел свои требования
CREATE TABLE Book
(
[Book No] int,
[Receipt No] int
)
;WITH q AS
(
SELECT 1 AS num
UNION ALL
SELECT num + 1
FROM q
WHERE num < 9000
), q2 as
(
SELECT 1 as num2
UNION ALL
SELECT num2 + 1
FROM q2
WHERE num2 < 50
)
INSERT INTO Book
SELECT Q.num, Q2.num2
FROM q CROSS JOIN q2
OPTION (MAXRECURSION 9000)
SELECT * from Book
order by [Book No], [Receipt No]
[Правка 3] ... появилось несколько лучшее описание требований:
;WITH q AS
(
SELECT 1 AS num
UNION ALL
SELECT num + 1
FROM q
WHERE num < 9000
)
SELECT num, FORMAT(NTILE(9000/50) OVER(ORDER BY num),'000#') AS Receipt
FROM q
ORDER BY num
OPTION (MAXRECURSION 9000)
Learn.net37
спасибо вам сэр но мне нужно получить доступ как 45 и т. д.
пример: ur code book recp
1 1-50
я хочу книгу recp
1 1
1 2
1 3
1 4
1 -
1 -
1 -
1 -
- -
1 50
2 51
и так далее
Learn.net37
я знаю, что это не очень хорошо, но плз мне это нужно , и вставка будет зависеть от recp no, так что все в порядке
CHill60
Я обновил свое решение. Если это все еще не то, что вам нужно, тогда четко опишите проблему.
Learn.net37
сэр когда его достигнет книга 2
бок отдых
2 1
rec снова идет 1, а не 51
и формат номер 1 не 0001 в recp
CHill60
Я снова обновил свое решение. .. что касается формата, то я уже показал вам, как это сделать.
Однако вам следует обдумать один вопрос... что происходит, когда вы продаете 51 экземпляр книги 1 ... вы не сможете выставить счет за него
Learn.net37
это как книга квитанции каждая книга имеет 50 квитанций, так что же мне делать, если у меня есть 33 книги с началом 1 до сих пор 1600 квитанций, и я хочу попытаться связать одну с какими-то другими записями или найти то, чего не хватает, и скажите мне, есть ли хорошая идея рядом с этим?
CHill60
Теперь я понимаю, чего вы добивались!
Вы правы, запросив эту таблицу с левым внешним соединением к таблице, содержащей" использованные " записи, вы можете определить, чего не хватает, ища нулевые значения, возвращаемые для объединенной таблицы.
CHill60
Я сомневаюсь, что вы можете позволить себе мою ежедневную ставку, но в любом случае я не делюсь своей личной электронной почтой на этом форуме.
CHill60
Возможно, вы захотите удалить его до того, как его найдут спам-боты
Learn.net37
последнее редактирование говорит мне формат в недопустимой функции, потому что, возможно, я использую 2008
CHill60
Тогда используйте альтернативу, которую я показал вам ранее
RIGHT('0000'+CAST(FORMAT(NTILE(9000/50) OVER(ORDER BY num)AS VARCHAR(4)),4)