数据转换将一行转换为多行

时间:2018-08-28 19:11:51

标签: mysql

我确实有一个表格,其中包含如下所示的数据。

Table_A

Row Id    Date1        Date2        Date3
1         1/12/2008    2/12/2008    3/12/2008
2         2/12/2010    NULL          NULL
3         3/12/2008    4/12/2008     NULL

我需要编写一个MySQL查询来获得这样的结果

Row Id    App_Date     Date1          Date2         Date3
1         1/12/2008    1/12/2008      2/12/2008     3/12/2008
1         2/12/2008    1/12/2008      2/12/2008     3/12/2008
1         3/12/2008    1/12/2008      2/12/2008     3/12/2008
2         2/12/2010    2/12/2010      NULL          NULL
3         3/12/2008    3/12/2008      4/12/2008     NULL
3         4/12/2008    3/12/2008      4/12/2008     NULL

基本上,我想基于App_DateDate1Date2来填充新列Date3。如果任何“日期”字段具有任何值。

然后,我应该用该列中填充的日期创建一条记录。例如,如果一条记录中填充了所有3个日期,那么我应该为该条记录具有3条记录,并在上面的新列App_Date中填充日期。

实现此目标的最佳MySQL查询是什么?

1 个答案:

答案 0 :(得分:0)

假设您的日期列数始终为3,则可以这样编写union查询:

select id, date1 as app_date, date1, date2, date3 from test
    where not isnull(date1)
union
select id, date2 as app_date, date1, date2, date3 from test
    where not isnull(date2)
union
select id, date3 as app_date, date1, date2, date3 from test
    where not isnull(date3)
order by id, app_date