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

问题描述

DB-Fiddle

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

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

预期结果:

产品
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'),'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 是正确的方法。您想要的是 CROSS JOINyear 表,用于那些具有 LESS OR EQUAL TO year

的产品
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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...