如何在SQL中指定打印

时间:2018-09-05 14:57:20

标签: sql-server tsql

这是我下面的代码,用于反向打印数字并继续递减。我可以打印,但是应该从下到上开始。基本上,我需要以下输出。

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 :(得分:1)

您可以使用辅助变量:

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 Demo

输出:

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

答案 1 :(得分:0)

一种选择是使用递归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

同样,如果您需要打印值(而不是作为记录集获取),则可以使用光标在结果上循环。

答案 2 :(得分:-1)

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