首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中将列结果集转换为独立行

在MySQL中将列结果集转换为独立行
EN

Database Administration用户
提问于 2020-08-23 10:28:22
回答 1查看 217关注 0票数 -2

我对此非常陌生,并且一直在为一个问题而奋斗。

我有一个结果集,对于表中的每一个机会(id作为主键),提供第一个现金流(DFCFW)的日期作为一个列,下面的10个列(CFW1、CFW2、.、CFW10)是接下来10个年份中每一个可能的现金流,预期是第一个现金流的周年日期。

我想要创建一个视图,为所有的机会显示三列: opportunity.id,现金流日期,现金流;每个机会应该有10条记录。

有什么建议如何做到这一点吗?

非常感谢

弗雷德

为了增加一些清晰度:

我今天拥有的是这样的:

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

EN

回答 1

Database Administration用户

发布于 2020-08-23 12:07:42

不幸的是,MySQL 没有是一个UNPIVOT操作符,在这种情况下非常方便--恐怕您只需要卷起袖子,手工操作即可。看到小提琴这里 -我只做了3 CFWs -你可以复制和粘贴的剩余。

代码语言:javascript
复制
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
);

填充它:

代码语言:javascript
复制
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);

然后跑:

代码语言:javascript
复制
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

结果:

代码语言:javascript
复制
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

我同意这些评论,其中建议您应该考虑重新设计您的模式--您的主模式应该看起来像最终的结果。根据经验,桌子应该是高而瘦的,不应该又矮又胖!

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/274183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档