Oracle SQL - 具有总计的动态数据透视表

时间:2014-07-18 13:16:05

标签: sql oracle11g

我需要创建一个具有动态列数据的查询,并且必须将其作为行进行旋转。我发现了一个非常好的功能。这篇文章就在这里,源代码位于底部:http://technology.amis.nl/2006/05/24/dynamic-sql-pivoting-stealing-antons-thunder/

我需要的额外步骤是获取行和列的总计。如果我从上面的文章中选择最后一个例子:

select * from table( pivot(  'select * from city_connections' ) )

有以下数据:

enter image description here

他创建了一个他的查询视图,我做了同样的事情。但基本上现在我想添加另一行和列,这将给我总数。例如下面的一些事情:

enter image description here

如果我在原始查询中执行ROLLUP('行标签')然后运行pivot函数,那么我将获得最后一个空行。任何建议都会很棒,谢谢。

我设法将行的GRAND TOTAL设为:

GROUP BY order_source, ROLLUP (status)
order by case
            when status = 'GRAND TOTAL' THEN 1
            ELSE 2
            END;

努力让总排在最后一排。但现在我需要总栏目。

目前进展如下: enter image description here

我的视图创建如下,简化,它给出了当前的进度图像:

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

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

努力创建查询,同时选择缺少的列。

当我运行以下查询时:

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

我得到以下结果:

enter image description here

有没有办法总结"完成","订单处理错误","信用检查被拒绝"等等?我的Grand Total工作正常,在Row Labels专栏中。我想要另一个Grand Total,它将按照我所描述的顺序进入Order_Source列。

将基本查询进一步更改为:

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

数据是:

enter image description here

但是当我在我的Pivot函数中以相同的方式运行它时,它不会将GRAND TOTAL2拉为另一列,就像它对其他行所做的那样。查询是:

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

数据如下,请注意我已经失去了Grand Total的排...: enter image description here

0 个答案:

没有答案