SQL 增量计数器
SQL Increment Counter
我有一列的值类似于
2014.STA.?
2014.STA.?
2014.STA.?
2015.STA.?
2016.STA.?
2014.STA.?
2014.STA.?
2016.STA.?
我需要创建一个可以按年份分组并添加索引而不是“?”的函数。这意味着,我想要得到这样的结果
2014.STA.1
2014.STA.2
2014.STA.3
2015.STA.1
2016.STA.1
2014.STA.4
2014.STA.5
2016.STA.2
我不知道如何将这些列分组并在函数中使用它。
对于 mssql2008
使用Row_Number
window函数生成数字
select left(yourcol,len(yourcol)-1)+cast(RN as varchar(20))
(
select row_number()over(partition by your_col order yourcol) As RN,*
From yourtable
)
我认为这符合您的要求:
select (left(col, 9) +
cast(row_number() over (partition by left(col, 9) order by (select null)) as varchar(255))
)
注意:这对值进行了任意排序。据推测,有一列指定了数字的正确顺序。
实际上,您可以在没有 cast()
的情况下使用 replace()
:
select replace(col, '?',
row_number() over (partition by left(col, 9) order by (select NULL))
)
cast()
隐含在此版本中。
select substring(c1, 1, 9) + CONVERT(CHAR, ROW_NUMBER() OVER (partition by c1 ORDER BY substring(c1,1,4))) from @tabla
它适用于我的 SQL Server 2014。检查这个:
select substring(c1, 1, 9) + cast(ROW_NUMBER() OVER (partition by c1 ORDER BY substring(c1,1,4)) as char(12)) from @tabla
如果您想按号码订购:
select r1 from (
select substring(c1, 1, 9) + cast(ROW_NUMBER() OVER (partition by c1 ORDER BY substring(c1,1,4)) as char(12)) AS r1 from @tabla) AS T
order by substring(r1, 10, len(r1))
我有一列的值类似于
2014.STA.?
2014.STA.?
2014.STA.?
2015.STA.?
2016.STA.?
2014.STA.?
2014.STA.?
2016.STA.?
我需要创建一个可以按年份分组并添加索引而不是“?”的函数。这意味着,我想要得到这样的结果
2014.STA.1
2014.STA.2
2014.STA.3
2015.STA.1
2016.STA.1
2014.STA.4
2014.STA.5
2016.STA.2
我不知道如何将这些列分组并在函数中使用它。
对于 mssql2008
使用Row_Number
window函数生成数字
select left(yourcol,len(yourcol)-1)+cast(RN as varchar(20))
(
select row_number()over(partition by your_col order yourcol) As RN,*
From yourtable
)
我认为这符合您的要求:
select (left(col, 9) +
cast(row_number() over (partition by left(col, 9) order by (select null)) as varchar(255))
)
注意:这对值进行了任意排序。据推测,有一列指定了数字的正确顺序。
实际上,您可以在没有 cast()
的情况下使用 replace()
:
select replace(col, '?',
row_number() over (partition by left(col, 9) order by (select NULL))
)
cast()
隐含在此版本中。
select substring(c1, 1, 9) + CONVERT(CHAR, ROW_NUMBER() OVER (partition by c1 ORDER BY substring(c1,1,4))) from @tabla
它适用于我的 SQL Server 2014。检查这个:
select substring(c1, 1, 9) + cast(ROW_NUMBER() OVER (partition by c1 ORDER BY substring(c1,1,4)) as char(12)) from @tabla
如果您想按号码订购:
select r1 from (
select substring(c1, 1, 9) + cast(ROW_NUMBER() OVER (partition by c1 ORDER BY substring(c1,1,4)) as char(12)) AS r1 from @tabla) AS T
order by substring(r1, 10, len(r1))