繁体   English   中英

SQL Server:通过重复 AZ 组织 100 行的列?

[英]SQL Server: Column with 100 rows organized by repeating A-Z?

我希望创建一个有 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;

我已经在这里呆了几个小时,在两种解决方案中尝试不同的方法来获得答案。

提前致谢。

如果要重复循环生成字母,可以使用递归 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)

表中的行没有特定的顺序。 即使该表指定了聚集索引。 这样的概念在关系数据库中不存在。 为了确保特定的值顺序,您需要在 SELECT 语句中使用 ORDER BY 子句强制它。 考虑到这一点,以下代码必须让您了解如何实现您的解决方案:

With nums as (
SELECT n
FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) t(n)
),
numbers as (
SELECT n1.n + n10.n * 10 as num
FROM nums n1
CROSS JOIN nums n10
)
select num, char(num/26 + 65) + CHAR(num % 26 + 65)
from numbers
order by num

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM