Создать представление на целое число? - PullRequest
0 голосов
/ 13 ноября 2011

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

Например:

выберите A.number ----->5

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

PS: это реальная проблема, которую я сильно упростил.Настоящая проблема подобна разделению бюджета на определенный день на каждый день.

Ответы [ 2 ]

1 голос
/ 13 ноября 2011

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

Хотя я могу дать указание, как решить вопрос. Вы используете рекурсивный 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
0 голосов
/ 13 ноября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...