从数据透视查询中选择列

时间:2014-09-24 12:05:50

标签: sql oracle

我有以下数据透视查询:

select *
from
(
  select order_id,unit_price,quantity,sum(unit_price*quantity) 
  over (partition by order_id) as Total
 from DEMO_ORDER_ITEMS 
) tbla
pivot
(
  sum(unit_price*quantity) as unit_totals 
  for unit_price in(30,50,60,80,110,120,125,150)
) tblb
order by order_id;  

产生以下结果:

ORDER_ID    TOTAL   30_UNIT_TOTALS  50_UNIT_TOTALS  60_UNIT_TOTALS  80_UNIT_TOTALS  110_UNIT_TOTALS 120_UNIT_TOTALS 125_UNIT_TOTALS 150_UNIT_TOTALS

1           1890    500             640             750
2           2380    60              250             180             480               220               240             500             450
3           1640    100             240             320             480 500 
4           1090    180             200             220             240 250 
5           950     150             180             320             300
6           1515    330             360             375             450
7           905 90  250             120             320             125 
8           1060    160             330             120             450
9           730     240             240             250 
10          870     250             320             300

我想更改以TOTAL结尾的列的顺序。如何按首选顺序选择列? 这样做:选择tblb。* ....但选择tblb.30_UNIT_TOTALS失败。

1 个答案:

答案 0 :(得分:1)

如果字段不是以字母字符开头,则必须引用字段。此外,使用引号使标识符区分大小写。所以你必须写:

tblb."30_UNIT_TOTALS"

来自the documentation

  
    
        
  1. 不带引号的标识符必须以数据库字符集中的字母字符开头。带引号的标识符可以以任何字符开头。
  2.        
     

[...]

     
    
        
  1. 不带引号的标识符不区分大小写。 Oracle将它们解释为大写。带引号的标识符区分大小写。
  2.