Как распечатать указанный в sql - PullRequest
0 голосов
/ 05 сентября 2018

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

5 4 3 2 1 
4 3 2 1 
3 2 1
2 1
1

Я написал приведенный ниже запрос, но не могу поставить его в указанном формате. Код ниже находится в SQL. Любая помощь будет оценена.

DECLARE @X INT,@STRING VARCHAR (100)
SET @STRING = ''
SET @X = 1

WHILE @X<6
    BEGIN
        SET @STRING = @STRING +' '+ CAST (@X AS VARCHAR (100))
        PRINT REVERSE(@STRING)

        SET @X +=1
    END

Приведенный выше запрос дает мне следующий вывод:

1 
2 1 
3 2 1 
4 3 2 1 
5 4 3 2 1 

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Вы можете использовать вспомогательную переменную:

DECLARE @X INT = 1
       ,@STRING VARCHAR (1000) = ''
       ,@res VARCHAR(1000) = '';

WHILE @X<6
BEGIN
    SET @STRING = CAST (@X AS VARCHAR (100)) + ' ' + @STRING;
    SET @res = @STRING + CHAR(10) + @res;
    SET @X +=1;
END

PRINT @res;

Демоверсия DBFiddle

Выход:

5 4 3 2 1
4 3 2 1 
3 2 1 
2 1
1 
0 голосов
/ 05 сентября 2018

Одним из вариантов является использование рекурсивного CTE для получения необходимых данных, а затем использование курсора для обработки операторов печати (если вы не можете использовать набор записей). Запрос будет выглядеть примерно так:

with numbers(n, s) AS (
    SELECT 1, convert(varchar(max), 1)
    UNION ALL
    SELECT n+1, convert(varchar(max), n+1) + ' ' + s 
    FROM numbers
    WHERE n < 5
)
SELECT s FROM numbers ORDER BY n DESC

давая вам это:

s
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1

Опять же, если вам нужно распечатать значения (а не получить как набор записей), вы можете использовать курсор для циклического перебора результатов.

0 голосов
/ 05 сентября 2018
DECLARE @X INT,@STRING VARCHAR (100)
SET @STRING = ''
SET @X = 1

WHILE @X<6
BEGIN
    SET @STRING = CAST (@X AS VARCHAR (100)) + ' ' + @STRING
    PRINT REVERSE(@STRING)

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