如何解决在产品和年份列表中,使用递归函数包含前几年的产品
这是我面临的问题的简化。它归结为显示当前和前几年产品列表的 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 JOIN
和 year
表,用于那些具有 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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。