在产品和年份列表中,使用递归函数来包含前几年的产品

In a list of Product and Year, use a Recursive Function to Include products of previous years

DB-Fiddle

这是我面临的问题的简化。它归结为一个 CTE,显示当前和前几年的产品列表。对于第一年(2018 年),它只会显示 2018 年的产品。第二年(2019年)会展示2019+2018年的产品等

我不知道 CTE 是否是最佳解决方案,但需要从某个地方开始。

预期结果:

year product
2018 product2018A
2018 product2018B
2019 product2018A
2019 product2018B
2019 product2019
2020 product2018A
2020 product2018B
2020 product2019
2020 product2020A
2020 product2020B

尝试:

DECLARE   @YearProduct  TABLE(
    [year] int,
    product VARCHAR(20)
);

INSERT INTO @YearProduct
([year], product)
VALUES 
('2018', 'product2018A'),
('2018', 'product2018B'),
('2019', 'product2019'),
('2020', 'product2020A'),
('2020', 'product2020B')

;WITH  CTE AS(  
SELECT  [year], product
FROM @YearProduct
UNION ALL
SELECT  yp.[year], yp.product
FROM @YearProduct yp
  INNER JOIN CTE ON CTE.[year]+1 = (yp.[year] ) AND CTE.product = yp.product
)
SELECT * FROM CTE

递归cte才是正道。对于 LESS OR EQUAL TO year

的产品,您想要的是 CROSS JOINyear table
SELECT Y.[year], P.product
FROM   @YearProduct P
       INNER JOIN 
       (
           SELECT distinct [year] 
           FROM   @YearProduct
       ) Y    ON P.[year] <= Y.[year]
ORDER BY Y.[year]

dbfiddle