枚举N行N列的自然数列

时间:2021-07-07 14:58:52

数据库环境:SQL SERVER 2005

现有一个需求,要枚举1-50个自然数,分10行5列展示。如图,

aaarticlea/png;base64,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" alt="" />

解题思路:

1.利用数字辅助表,枚举1-50的自然数列

2.将数字集进行行转列,对5求余作为转列的条件,并按照整除5分组

SQL实现

/*枚举1-50的自然数列*/
WITH x0
AS ( SELECT number
FROM master..spt_values
WHERE type = 'P'
AND number >= 1
AND number <= 50
)
/*行转列*/
SELECT ( number - 1 ) / 5 + 1 AS 行号 ,
MAX(CASE WHEN number % 5 = 1 THEN number
END) AS 第一列 ,
MAX(CASE WHEN number % 5 = 2 THEN number
END) AS 第二列 ,
MAX(CASE WHEN number % 5 = 3 THEN number
END) AS 第三列 ,
MAX(CASE WHEN number % 5 = 4 THEN number
END) AS 第四列 ,
MAX(CASE WHEN number % 5 = 0 THEN number
END) AS 第五列
FROM x0
GROUP BY ( number - 1 ) / 5

很简单。

(本文完)