选择表列标题为值

时间:2015-08-06 15:45:02

标签: mysql sql database

我有一张表格如下:

  

ItemNumber - 描述 - 2015年3月31日 - 2015年4月31日 - 2015年5月31日 -   2015年6月31日

     

========= - ======== - ======== - ======== - ====== == - =========

     

001   .................. XYZ ..................空............ .... 1000 ...............空................空

     

002   .................. XYA .................. 2000 ............ ....空............... 3000 ................空

     

003   .................. XYB ..................空............ .... 4000 ...............空................ 5000

     

004   .................. XYC .................. 6000 ............ .... 7000 ...............空................空

     

005   .................. XYD ..................空............ .... 8000 ............... 9000 ................空

     

006   .................. XYE ..................空............ .... 10000 ...............空................空

     

=============================================== ====================

如何编写查询以返回值,以便我可以获取具有值(不为空)的字段的列标题,并获取该列标题,如:

  

ItemNumber - 描述 - 数量 - 日期

     

========= - ======== - ====== - ====

     

001 .............. - xyz ........... - 1000 ...... - 2015年4月31日12: 00:00 AM

     

002 .............. - xya ........... - - 2000 ...... - 03/31/2015 12: 00:00 AM

     

002 .............. - xya ........... - 3000 ...... - 2015年5月31日12: 00:00 AM

     

003 .............. - xyb ........... - 4000 ...... - 2015年4月31日12: 00:00 AM

等等...

抱歉可怕的格式化,我无法弄清楚如何在没有点的情况下创建合适的间距。

1 个答案:

答案 0 :(得分:1)

您可以使用大量union all

执行此操作
select t.*
from (select ItemNumber, Description, '31.03.2015' as date, `31.03.2015` as quantity
      from table
union all
      select ItemNumber, Description, '31.04.2015' as date, `31.04.2015` as quantity
      from table
      . . .
     ) t
where quantity is not null;

在Oracle中,您可以使用双引号而不是反引号来转义列名。

并且,如果您有大量数据,还有其他方式来表达查询,因此您只扫描一次表。