sql oracle选择不同的数量字段

时间:2016-01-06 10:08:01

标签: sql oracle field

我有一张这样的表:

| criteria | jan | feb | mar | apr | may | jun | jul |
|A         |100  |100  |100  |100  |100  |100  |100  |
|B         |200  |200  |200  |200  |200  |200  |200  |

我希望根据月份选择字段。 如果月份是一月份,那么我希望我的桌子看起来像这样

| criteria | jan |
|A         |100  |
|B         |200  |

如果月份是3月,那么我希望我的表看起来像这样

| criteria | jan | feb | mar |
|A         |100  |100  |100  |
|B         |200  |200  |200  |

请帮助我,谢谢...

1 个答案:

答案 0 :(得分:0)

所以,如果你不介意你的结果以xml的形式回归。

这是一些示例数据

CREATE TABLE table1
AS
   SELECT 'A' criteria,
          100 jan,
          100 feb,
          100 mar,
          100 apr
     FROM DUAL
   UNION ALL
   SELECT 'B',
          200,
          200,
          200,
          200
     FROM DUAL;

我只去了四月,但你明白了 这是1月份的结果。

WITH sql_statements
     AS (SELECT 'select criteria, jan from table1' jan,
                'select criteria, jan, feb from table1' feb,
                'select criteria, jan, feb, mar from table1' mar,
                'select criteria, jan, feb, mar, apr from table1' apr
           FROM DUAL)
SELECT DBMS_XMLGEN.getxmltype (jan)
  FROM sql_statements;

结果

  <ROWSET>
 <ROW>
  <CRITERIA>A</CRITERIA>
  <JAN>100</JAN>
 </ROW>
 <ROW>
  <CRITERIA>B</CRITERIA>
  <JAN>200</JAN>
 </ROW>
</ROWSET>

现在将您的查询更改为4月。

WITH sql_statements
     AS (SELECT 'select criteria, jan from table1' jan,
                'select criteria, jan, feb from table1' feb,
                'select criteria, jan, feb, mar from table1' mar,
                'select criteria, jan, feb, mar, apr from table1' apr
           FROM DUAL)
SELECT DBMS_XMLGEN.getxmltype (apr)
  FROM sql_statements;

结果

<ROWSET>
 <ROW>
  <CRITERIA>A</CRITERIA>
  <JAN>100</JAN>
  <FEB>100</FEB>
  <MAR>100</MAR>
  <APR>100</APR>
 </ROW>
 <ROW>
  <CRITERIA>B</CRITERIA>
  <JAN>200</JAN>
  <FEB>200</FEB>
  <MAR>200</MAR>
  <APR>200</APR>
 </ROW>
</ROWSET>