在SQL Server 2008中生成Alpha数字系列

时间:2016-08-02 11:45:49

标签: sql sql-server sql-server-2008

有人可以帮我吗?

我想生成像A.1, A.2, A.3, A.4, B.1, B.2这样的字母数字系列,如果我添加新行,它会自动递增。

我有一个A和B列,如下所示。

A   B 
-----
1   A
1   A
1   A
1   A
2   B
2   B
3   C
3   C
3   C

结果必须如下所示:

A   B   C
-----------
1   A   A.1
1   A   A.2
1   A   A.3
1   A   A.4
2   B   B.1
2   B   B.2
3   C   C.1
3   C   C.2
3   C   C.3

2 个答案:

答案 0 :(得分:0)

以下查询可以返回您的预期结果。

SELECT A, B, B + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY B ORDER BY A) AS VARCHAR) AS C
FROM TableName

生成Alpha数字系列很困难。在计算列中使用ROW_NUMBER()也是不可能的。因此,对于您的案例view是实现您期望的正确选择:

CREATE VIEW dbo.vw_MyAlphaNumbericOrder AS
SELECT A, B, B + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY B ORDER BY A) AS VARCHAR) AS C
FROM dbo.TableName

因此,当您插入新记录时,SELECT * FROM dbo.vw_MyAlphaNumbericOrder将返回字母数字系列作为列C

使用给定的样本数据执行示例:

DECLARE @TestTable TABLE (A INT, B VARCHAR (2));

INSERT INTO @TestTable (A, B) VALUES
(1, 'A'),
(1, 'A'),
(1, 'A'),
(1, 'A'),
(2, 'B'),
(2, 'B'),
(3, 'C'),
(3, 'C'),
(3, 'C');

SELECT A, B, B + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY B ORDER BY A) AS VARCHAR) AS C
FROM @TestTable

答案 1 :(得分:0)

我们可以通过以下声明来实现这一目标:

Rate

1.row_number()over(Partition by) - 将生成新的行号。在B列的每个类别中 2.Cast - 将数值更改为字符值,其中32指定字段可以容纳的数据长度 3. Concat--将连接所需的列以创建字母数字字符串