这是我面临的问题的简化。它归结为显示当前和前几年产品列表的 CTE。第一年(2018 年),它只会显示 2018 年的产品。第二年(2019)将展示2019+2018产品等。
我不知道 CTE 是否是最佳解决方案,但需要从某个地方开始。
预期结果:
年 | 产品 |
---|---|
2018 | 产品2018A |
2018 | 产品2018B |
2019 | 产品2018A |
2019 | 产品2018B |
2019 | 产品2019 |
2020 | 产品2018A |
2020 | 产品2018B |
2020 | 产品2019 |
2020 | 产品2020A |
2020 | 产品2020B |
试图:
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