有人可以帮我吗?
我想生成像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
答案 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--将连接所需的列以创建字母数字字符串