我以前见过这个问题,但无法得到有效的答案。
我有两列 - startyear
和endyear
。我想创建一个开始和结束年份之间所有年份的列表。因此,如果该行的2010年startyear
和2016年的endyear
,我希望该列表显示2010年,2011年,2012年等。
我是否必须以某种方式获取所有行中最早的startyear
和最新endyear
?
SELECT StartYear, EndYear
FROM TestYear
答案 0 :(得分:3)
您可以使用递归$e = ORM::for_table('sys_taxdate')->find_one(2);
$date = $e->get('taxdate');
$idate = $date;
$its = strtotime($idate);
$dd = date('Y-m-d', strtotime('+3 months', $its));
:
CTE
答案 1 :(得分:1)
在存储过程中尝试这样的事情。
SELECT * INTO #FileDates
FROM (SELECT distinct year(startyear) as year from filename )
SELECT * INTO #FileDates2
FROM (SELECT distinct year(endyear) as year from filename )
select distinct year from #FileDate, #FileDate2
答案 2 :(得分:1)
使用递归cte来执行此操作。
declare @startyear int = 2010; --or any other number or a select query
declare @endyear int = 2020; --or any other number or a select query
with years(yr) as
(
select @startyear
union all
select yr+1 from years where yr < @endyear
)
select * from years;
答案 3 :(得分:1)
示例数据
Declare @t Table (StartYear INT , EndYear INT)
INSERT INTO @t Values (2010 , 2011), (2012 , 2016);
<强>查询强>
WITH X AS (
Select MIN(StartYear) MinYear
,MAX(EndYear) MaxYear
FROM @t
)
Select TOP ((Select MaxYear FROM X)
- (Select MinYear FROM X) + 1)
ROW_Number() Over (Order by (Select NULL))
+ (Select MinYear FROM X) -1 rn
FROM master..spt_values a
Cross Join master..spt_values b