我需要创建一个具有动态列数据的查询,并且必须将其作为行进行旋转。我发现了一个非常好的功能。这篇文章就在这里,源代码位于底部:http://technology.amis.nl/2006/05/24/dynamic-sql-pivoting-stealing-antons-thunder/
我需要的额外步骤是获取行和列的总计。如果我从上面的文章中选择最后一个例子:
select * from table( pivot( 'select * from city_connections' ) )
有以下数据:
他创建了一个他的查询视图,我做了同样的事情。但基本上现在我想添加另一行和列,这将给我总数。例如下面的一些事情:
如果我在原始查询中执行ROLLUP('行标签')然后运行pivot函数,那么我将获得最后一个空行。任何建议都会很棒,谢谢。
我设法将行的GRAND TOTAL设为:
GROUP BY order_source, ROLLUP (status)
order by case
when status = 'GRAND TOTAL' THEN 1
ELSE 2
END;
努力让总排在最后一排。但现在我需要总栏目。
目前进展如下:
我的视图创建如下,简化,它给出了当前的进度图像:
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;
我得到以下结果:
有没有办法总结"完成","订单处理错误","信用检查被拒绝"等等?我的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;
数据是:
但是当我在我的Pivot函数中以相同的方式运行它时,它不会将GRAND TOTAL2拉为另一列,就像它对其他行所做的那样。查询是:
SELECT * FROM TABLE(
pivot('SELECT * FROM TEST1')
);
数据如下,请注意我已经失去了Grand Total的排...: