Sql 在分区上生成行号为()的计算列

Sql 在分区上生成行号为()的计算列,sql,sql-server,tsql,data-structures,database-design,Sql,Sql Server,Tsql,Data Structures,Database Design,我想根据状态和数据库中出现的次数生成一个包含唯一数字的列 就像 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 我

我想根据状态和数据库中出现的次数生成一个包含唯一数字的列

就像

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
我可以使用partitionby在视图中生成它 并连接结果

但我不确定是否可以根据上面的行数()创建一个计算列(按某物划分,按某物排序)

只有两个问题

1) 我可以在计算列中使用分区吗

2) 有更好的方法吗

(根据评论更新:)


看,我试图生成的列将变成主键…所有其他列都将附加到它。。。这是业务需求。。。只能这样做


我必须在数据库中生成一个票号,它应该像。。。状态\状态中的票证数\这是所有数据库将附加到的编号


这是一个excel工作表,我要转换为sql表。。。这是我所说的票号……它必须以这种方式生成。

计算列中
我们不能使用
窗口
函数,相反,您可以选择
查看

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)我可以在计算列中使用[window function with]partition[by]吗

回答:是的,通过使用函数返回值,但是不会
持续
,因为它是不确定的

问题2)有更好的方法吗

回答:是的,这应该不是主键

为什么要将此作为主键


说这是一个业务需求并不是一个好主意。找到另一种方法来满足您的业务需求,而不会迫使您做出可怕的设计决策

您能显示表模式以及您想要的分区和排序依据吗?这是一个excel工作表,我要转换为sql表。。。我说的是票号,必须按这种方式生成,看,我试图生成的列将变成主键,其他所有列都将附加到它上。。。这是业务需求。。。只能这样做。。。请帮忙me@Vikram-正如我已经提到的,您不能在
计算列中使用
行数
窗口函数
我已经更新了问题。。。。请帮帮我,我该怎么做。。。仅在数据库中不在view@Vikram-你能清楚地说出你的要求吗。您的更新有点混乱,我必须在数据库中生成一个票号,它应该像。。。状态\状态中的票证数\这是所有数据库将附加到的编号。。。