Создать представление для целого числа?

#sql #function #view

#sql #функция #Вид

Вопрос:

У меня есть таблица с именем A. в ней есть только одна запись с одним полем. Это целое число с именем number. Я хочу создать представление, содержащее записи A.number, каждая из которых на одно из чисел меньше A.number.

Например:

выберите A.число ——> 5

в представлении должно отображаться 5 записей 0 1 2 3 4

P.S: Это реальная проблема, которую я сильно упростил. Реальная проблема похожа на разделение бюджета за фиксированный период на каждый день.

Комментарии:

1. Это домашнее задание или откуда-то взялась головоломка?

2. Ни один из них. Реальная проблема. Основная проблема сложнее. Я просто упростил это.

Ответ №1:

Это звучит немного так, как будто это может быть домашнее задание, поэтому я опасаюсь предоставлять код напрямую.

Однако я могу дать указатель на то, как решить этот вопрос. Вы используете рекурсивный CTE, где каждая итерация добавляет единицу к предыдущей итерации. Просто не забудьте установить параметр MAXRECURSION, если вы будете проверять числа > 101. Вы можете использовать скалярный подзапрос, чтобы привязать представление к исходной таблице:


 WITH numbers ( n ) AS (
    SELECT 0 UNION ALL
    SELECT 1   n FROM numbers WHERE n < (select number from a) -1)
SELECT n FROM numbers
OPTION ( MAXRECURSION 500) --example
  

Комментарии:

1. Я не могу понять ваш ответ. Итерация в представлении?

2. Пожалуйста, позвольте мне протестировать это, а затем я отмечу это как правильный ответ. Спасибо за вашу помощь.

3. должен ли я иметь таблицу с именем digits с (1 .. 500) в ней?

4. цифры уже удалены. «цифры» — это то, для чего я использовал его в коде, когда мне в последний раз нужно было это сделать.

5. Являются ли числа таблицей с полем с именем n?

Ответ №2:

Если номер вашей таблицы будет < 2048 и вы находитесь на SQL Server, это сработает для вас:

 CREATE VIEW MyView AS
   SELECT number
   FROM master..spt_values
   WHERE type = 'p'
      AND number < (SELECT value FROM yourTable)
  

В качестве альтернативы вы могли бы рассмотреть возможность создания собственной таблицы чисел соответствующего размера, соответствующего вашему приложению, если вам требуется более высокий предел или вы не находитесь на SQL Server, который вам это предоставил. Вот ссылка на сообщение в блоге об идее создания удобной «таблицы чисел».