首页 > 解决方案 > SQL Server:由重复 AZ 组织的 100 行的列?

问题描述

我正在寻找一个有 100 行的表,第一列由字母 AZ 组织,并一直重复到 100。我最接近的是:

  1. 有一个数字列,然后使用 ASCII 值将数字转换为字母,但是这涉及首先创建数字列,然后让字母列依赖于该列,或者

  2. 我已经能够创建一个列,但是当我尝试打印整个表格时,它显示为 AAAA、BBBB、CCCC、DDDD 等。

我需要该列完全独立,这就是解决方案 #1 不起作用的原因,我找不到正确排序或组织解决方案 #2 的方法,使其成为 A、B、C 而不是它的方式现在打印。上下文截图:

解决方案 1

解决方案 2

我一直在使用此代码来创建表:

SELECT n
FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) t(n)
)
SELECT n1.n + n10.n * 10 as col
INTO dbo.table1
FROM nums n1
CROSS JOIN nums n10;

然后对于解决方案1,我尝试了这个:

ALTER TABLE numbers
ADD letters AS CHAR(num % 26 + 65);

SELECT * FROM numbers
ORDER BY num;

对于解决方案2,这个:

ALTER TABLE table1
ALTER COLUMN col VARCHAR(3);

UPDATE table1
SET col = col % 26 + 65;

UPDATE table1
SET col = CHAR(col);

SELECT * FROM table1
ORDER BY col;

我已经在这几个小时了,在两种解决方案中尝试不同的东西来得到答案。

提前致谢。

标签: sqlsql-server

解决方案


如果要反复循环生成字母,可以使用递归 CTE:

 with cte as (
      select convert(varchar(max), 'A') as letter, 1 as n
      union all
      select (case when letter < 'Z' then convert(varchar(max), char(ascii(letter) + 1)) else 'A' end),
             n + 1
      from cte
      where n < 100
     )
select letter
from cte;

您可以使用insertselect into将值放入表中。

如果您想要超过 100 行,则需要添加option (maxrecursion 0).


推荐阅读