Oracle sql更改(动态)列顺序

时间:2014-07-21 12:09:47

标签: sql oracle oracle11g

我知道列顺序可以从它们被选中的顺序改变。我的问题涉及得更多,所以如果你不理解我的问题,请在评论中提问。

以下是我的询问:

SELECT NVL(status, 'GRAND TOTAL') AS row_labels
      ,NVL(order_source, 'GRAND TOTAL2') AS order_source
      ,count(1) Count#
FROM
SOMETABLE
GROUP BY ROLLUP (status), CUBE(order_source)
order by case
        when status = 'GRAND TOTAL' THEN 2
        ELSE 1
        END;

为简单起见,我说“SOMETABLE”,该条款也非常复杂。

以下是来自上述查询的数据:

enter image description here

我创建了一个视图,并在另一个函数中使用该视图,如下所示:

SELECT * FROM TABLE(
pivot('SELECT * FROM TEST1')
);

以下是数据透视后的数据:

enter image description here

以下是两个问题:

  1. 我希望Grand Total2成为最后一列,与Grand Total的最后一行类似。
  2. 我也希望'Grand Total2'标签为'GRAND TOTAL',但是当我在我的选择查询中将此标签更改为'GRAND TOTAL'时,我得到很多空,下面是数据。请注意GRAND TOTAL2栏。标签根本没有变化。
  3. 为了清楚起见,这就是我正在为上面的数字2创建一个视图:

    SELECT NVL(status, 'GRAND TOTAL') AS row_labels
          ,NVL(order_source, 'GRAND TOTAL') AS order_source
          ,count(1) Count#
    FROM
    SOMETABLE
    GROUP BY ROLLUP (status), CUBE(order_source)
    order by case
            when status = 'GRAND TOTAL' THEN 2
            ELSE 1
            END;
    

    enter image description here

    数据透视功能的来源位于:http://technology.amis.nl/2006/05/24/dynamic-sql-pivoting-stealing-antons-thunder/

    感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的挑战,我希望member1_id中的数据转到member2_id,反之亦然。

我导致使用ROW_NUMBER() OVER (ORDER BY order_id)而不是在查询结尾处使用ORDER BY子句。

SELECT * FROM ( 
    SELECT ROW_NUMBER() OVER (ORDER BY order_id) order_col, col1, col2 ...
)
PIVOT (
    MAX(col1) id, MAX(col2) name, ...
    FOR order_col IN (1 col1, 2 col2, ...)
);