Какой короткий запрос вернет вектор (таблица столбцов из одного столбца), представляющий набор целых чисел от x1 до x2? - PullRequest
0 голосов
/ 03 мая 2010

Предполагая, что у нас нет фактической таблицы для выбора данных, что нам нужно для SELECT, чтобы вернуть таблицу, состоящую из одного целочисленного столбца, содержащего все целые числа, начиная с x1 и заканчивая x2 и отсортированные в порядке возрастания?

Ответы [ 3 ]

1 голос
/ 03 мая 2010

вы можете использовать эту функцию (она основана на функции Ицик Бен-Гана из интервью, которое я провел с ним здесь: Интервью с Ицик Бен-Ган Автор Inside Microsoft SQL Server 2005: T-SQL Querying )

CREATE FUNCTION dbo.fn_numbers(@Start AS BIGINT,@End AS BIGINT) RETURNS TABLE
AS
RETURN
  WITH
  L0   AS(SELECT 1 AS c UNION ALL SELECT 1),
  L1   AS(SELECT 1 AS c FROM L0 AS A, L0 AS B),
  L2   AS(SELECT 1 AS c FROM L1 AS A, L1 AS B),
  L3   AS(SELECT 1 AS c FROM L2 AS A, L2 AS B),
  L4   AS(SELECT 1 AS c FROM L3 AS A, L3 AS B),
  L5   AS(SELECT 1 AS c FROM L4 AS A, L4 AS B),
  Nums AS(SELECT ROW_NUMBER() OVER(ORDER BY c) AS n FROM L5)
  SELECT n FROM Nums 
  WHERE n between  @Start and @End;  
GO  

Вот как вы его запускаете

-- Test function 
SELECT * FROM dbo.fn_numbers(1,100) AS F;  
GO

-- Test function 
SELECT * FROM dbo.fn_numbers(200,700) AS F;  
GO   
1 голос
/ 03 мая 2010

Один вариант (в T-SQL)

  Declare @X1 Integer Set @x1 = 45
  Declare @X2 Integer Set @x2 = 87
  Declare @I Integer Set @I = @x1
  Declare @Outs Table (val integer Primary Key Not Null)
  While @I <= @x2 Begin
    Insert @Outs(Val) Values (@I)
    Set @I = @I + 1
  End
  Select Val From @Outs
0 голосов
/ 03 мая 2010

Вы всегда таблица с данными в SQL Server для использования базы

WITH cDummy AS
(
    SELECT
        ROW_NUMBER() OVER (ORDER BY c1.id) AS number
    FROM
       sys.columns c1 CROSS JOIN  sys.columns c2 CROSS JOIN  sys.columns c3
)
SELECT
    number
FROM
    cDummy
WHERE
    number BETWEEN @x AND @x * 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...