我想基于状态和数据库中出现的次数生成包含唯一编号的列
就像
Ny_1
Ny_2
St_1
Ny_3
St_2
Up_1
Ny_4
等等......
我想要一个持久的计算列
其他栏必须像
Name | state | total | ticket no
Abc | Ny | 1 | Ny_1
Cda. | Ny | 2 | NY_2
Xyz. | St | 1 | ST_1
我可以使用partition by在视图中生成它 并连接结果
但是我不确定我是否可以创建一个基于row_number()的计算列(按某种顺序按某种顺序分区)
只需2个问题
1)我可以在计算列中使用分区
2)是否有更好的方法
(从评论中更新:)
看看我想要生成的列将成为主键...所有其他列都附加到它......这是业务需求......它必须以这种方式完成。 ..
我必须在数据库中生成一个票号,它应该像...状态中的票数的State_number这是所有数据库将附加到的号码。
这是我要转换为sql表的excel表...这是我正在谈论的票号...它必须以这种方式生成。
答案 0 :(得分:0)
在Computed column
我们无法使用window
个功能,您可以转到View
CREATE VIEW state_num
AS
SELECT state,
seq_state = state
+ Cast(Row_number()OVER(partition BY state ORDER BY state) AS VARCHAR(50))
FROM yourtable
如果您使用的是SQL SERVER 2012
及更高版本,请使用不需要显式转换的CONCAT
功能。
CREATE VIEW state_num
AS
SELECT state,
seq_state = Concat(state, Row_number()OVER(partition BY state ORDER BY state))
FROM yourtable
答案 1 :(得分:0)
问题1 )我可以在计算列中使用[window] with [partition]分区吗?
回答:是的,通过使用函数返回值,但是不是 persisted
,因为它是不确定的。
问题2 )有更好的方法吗?
回答:是的,这应该不作为主键。
为什么您希望这是您的主键?
说这是一项业务要求并不能让它成为一个好主意。找到另一种方法来满足您的业务需求,而不会迫使您做出可怕的设计决策。