Gra*_*eme 27 t-sql sql-server sql-server-2005
我需要一个年份列表作为记录集从2004年到当前年度(以desc顺序),而不编写存储过程.这可能吗?(SQL Server 2005).所以它应该返回:
2009
2008
2007
2006
2005
2004
Jos*_*ody 49
这使用递归CTE从2004年到现在的所有年份:
with yearlist as
(
select 2004 as year
union all
select yl.year + 1 as year
from yearlist yl
where yl.year + 1 <= YEAR(GetDate())
)
select year from yearlist order by year desc;
Run Code Online (Sandbox Code Playgroud)
ROW_NUMBER在任何足够大(稳定)的表中的任何列上使用将是一种方法。
SELECT *
FROM (
SELECT TOP 100 2003 + ROW_NUMBER() OVER (ORDER BY <AnyColumn>) AS Yr
FROM dbo.<AnyTable>
) Years
WHERE Yr <= YEAR(GETDATE())
Run Code Online (Sandbox Code Playgroud)
请注意,<AnyTable>应至少包含等于您需要的年数的行数。
system table应该想到一个足够大的。CTE约书亚给出的答案中提到的类似方法来实现这个要求。该CTE技术比当前给定的ROW_NUMBER解决方案优越得多且不易出错。更新以返回当前年份加上前 5 年。应该非常快,因为这是一个小记录集。
SELECT YEAR(GETDATE()) as YearNum
UNION
SELECT YEAR(GETDATE()) - 1 as YearNum
UNION
SELECT YEAR(GETDATE()) - 2 as YearNum
UNION
SELECT YEAR(GETDATE()) - 3 as YearNum
UNION
SELECT YEAR(GETDATE()) - 4 as YearNum
UNION
SELECT YEAR(GETDATE()) - 5 as YearNum
ORDER BY YearNum DESC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46627 次 |
| 最近记录: |