首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在db2中将单行拆分成多行?

如何在db2中将单行拆分成多行?
EN

Stack Overflow用户
提问于 2014-11-26 02:22:55
回答 2查看 1.4K关注 0票数 0

这是我在表xyz中的内容

代码语言:javascript
运行
复制
NAME      AMOUNT      BEGIN_DATE        END_DATE

ABC       5.0        2013-05-11         2014-06-20

下面是我想要使用IBM DB2数据库的内容。

代码语言:javascript
运行
复制
NAME      AMOUNT      BEGIN_DATE        END_DATE

ABC        5.0        2013-05-11         2013-12-31

ABC        5.0        2014-01-01         2014-06-30

我需要从xyz表中提取2行,而不是只从xyz表中提取一行。如何将一行拆分为两行?

EN

回答 2

Stack Overflow用户

发布于 2014-11-26 03:29:57

下面将只列出开始日期和结束日期正好跨越两年或在同一年内的行。

代码语言:javascript
运行
复制
SELECT 
    NAME,
    AMOUNT,
    BEGIN_DATE,
    DATE(YEAR(BEGIN_DATE)||'-12-31') AS END_DATE
 FROM xyz
 WHERE YEAR(END_DATE)-YEAR(BEGIN_DATE)=1
UNION
SELECT 
    NAME,
    AMOUNT,
    DATE(YEAR(END_DATE)||'-01-01') AS BEGIN_DATE,
    END_DATE
 FROM xyz
 WHERE YEAR(END_DATE)-YEAR(BEGIN_DATE)=1
UNION
SELECT 
    NAME,
    AMOUNT,
    BEGIN_DATE,
    END_DATE
 FROM xyz
 WHERE YEAR(END_DATE)-YEAR(BEGIN_DATE)=0
ORDER BY BEGIN_DATE
票数 1
EN

Stack Overflow用户

发布于 2014-11-26 02:38:35

您可以创建两个SQL语句,以选择第一个SQL语句,使用'2013-12-31‘作为结束日期的常量,然后选择第二个时间,使用'2014-01-01’作为常量开始日期。然后使用UNION ALL将它们放在一起。

如果您还有一些在2013年内开始和结束的记录,因此不需要拆分,则可以单独获取这些记录,并从其他两个查询中排除它们。您的数据中的其他变体可能需要一些额外的条件,但这个示例应该可以让您继续:

代码语言:javascript
运行
复制
select NAME, AMOUNT, BEGIN_DATE, END_DATE
from xyz
where END_DATE <= '2013-12-31'
UNION ALL
select NAME, AMOUNT, BEGIN_DATE, '2013-12-31'
from xyz
where END_DATE >= '2014-01-01'
UNION ALL
select NAME, AMOUNT, '2014-01-01', END_DATE 
from xyz
where END_DATE >= '2014-01-01'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27133942

复制
相关文章

相似问题

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