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-你能清楚地说出你的要求吗。您的更新有点混乱,我必须在数据库中生成一个票号,它应该像。。。状态\状态中的票证数\这是所有数据库将附加到的编号。。。