我对此非常陌生,并且一直在为一个问题而奋斗。
我有一个结果集,对于表中的每一个机会(id作为主键),提供第一个现金流(DFCFW)的日期作为一个列,下面的10个列(CFW1、CFW2、.、CFW10)是接下来10个年份中每一个可能的现金流,预期是第一个现金流的周年日期。
我想要创建一个视图,为所有的机会显示三列: opportunity.id,现金流日期,现金流;每个机会应该有10条记录。
有什么建议如何做到这一点吗?
非常感谢
弗雷德
为了增加一些清晰度:
我今天拥有的是这样的:

我正在寻找的是以下(日期以欧洲格式):

发布于 2020-08-23 12:07:42
不幸的是,MySQL 没有是一个UNPIVOT操作符,在这种情况下非常方便--恐怕您只需要卷起袖子,手工操作即可。看到小提琴这里 -我只做了3 CFWs -你可以复制和粘贴的剩余。
CREATE TABLE example
(
opp_id INTEGER NOT NULL PRIMARY KEY,
region VARCHAR (10) NOT NULL,
first_cfw DATE NOT NULL,
cfw1 INTEGER NOT NULL,
cfw2 INTEGER NOT NULL,
cfw3 INTEGER NOT NULL
);填充它:
INSERT INTO example VALUES
(1, 'Europe', '2020-06-01', 100, 100, 100),
(2, 'USA', '2020-02-01', 200, 200, 200),
(3, 'Europe', '2017-10-01', 150, 150, 150);然后跑:
SELECT opp_id, region, first_cfw AS the_date, cfw1 AS cost_fw
FROM example
UNION ALL
SELECT opp_id, region, DATE_ADD(first_cfw, INTERVAL 1 YEAR), cfw2
FROM example
UNION ALL
SELECT opp_id, region, DATE_ADD(first_cfw, INTERVAL 2 YEAR), cfw3
FROM example
ORDER BY opp_id, region, the_date ASC结果:
opp_id region the_date cost_fw
1 Europe 2020-06-01 100
1 Europe 2021-06-01 100
1 Europe 2022-06-01 100
2 USA 2020-02-01 200
2 USA 2021-02-01 200
2 USA 2022-02-01 200
3 Europe 2017-10-01 150
3 Europe 2018-10-01 150
3 Europe 2019-10-01 150我同意这些评论,其中建议您应该考虑重新设计您的模式--您的主模式应该看起来像最终的结果。根据经验,桌子应该是高而瘦的,不应该又矮又胖!
https://dba.stackexchange.com/questions/274183
复制相似问题