我知道列顺序可以从它们被选中的顺序改变。我的问题涉及得更多,所以如果你不理解我的问题,请在评论中提问。
以下是我的询问:
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”,该条款也非常复杂。
以下是来自上述查询的数据:
我创建了一个视图,并在另一个函数中使用该视图,如下所示:
SELECT * FROM TABLE(
pivot('SELECT * FROM TEST1')
);
以下是数据透视后的数据:
以下是两个问题:
为了清楚起见,这就是我正在为上面的数字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;
数据透视功能的来源位于:http://technology.amis.nl/2006/05/24/dynamic-sql-pivoting-stealing-antons-thunder/
感谢您的帮助。
答案 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, ...)
);