2013-10-31 28 views
0

我想使之和的后每个periodeSQL甲骨文ROLLUP不会总结正确

我有以下SQL(我想总结一下“总DKK”,“标准箱”和“公关TEU。”):

SELECT "STAT$DAN_2013".PERIOD, "STAT$DAN_2013".VESSEL_NAME AS "Skibsnavn", "STAT$DAN_2013".VOYAGE_NO AS "Voyage", SUM("STAT$DAN_2013".CREDIT_AMOUNT) - SUM("STAT$DAN_2013".DEBET_AMOUNT) AS "Total DKK", SUM("STAT$DAN_2013".TEUS) AS "Teus", (SUM("STAT$DAN_2013".CREDIT_AMOUNT) - SUM("STAT$DAN_2013".DEBET_AMOUNT))/SUM("STAT$DAN_2013".TEUS) AS "Pr. teu" 
FROM SCAN."STAT$DAN_2013" "STAT$DAN_2013" 
WHERE "STAT$DAN_2013".DEPARTMENT=107 AND "STAT$DAN_2013".PERIOD<1307 
GROUP BY rollup("STAT$DAN_2013".PERIOD, "STAT$DAN_2013".VESSEL_NAME, "STAT$DAN_2013".VOYAGE_NO) 
ORDER BY "STAT$DAN_2013".PERIOD, "STAT$DAN_2013".VESSEL_NAME, "STAT$DAN_2013".VOYAGE_NO; 

,但我得到的输出是这样的:

 
PERIOD  Skibsnavn    Voyage Total DKK Teus  Pr. teu 
1301  HANJIN ASIA   0004W  10.00  61  493.29 
1301  HANJIN ASIA      10.00  61  493.29 
1301  HANJIN ITALY   0010W  60.00  53  510.49 
1301  HANJIN ITALY      60.00  53  510.49 
1301  HANJIN SPAIN   0009W 100.00  74  526.11 
1301  HANJIN SPAIN     100.00  74  526.11 
1301          170.00  188  511.06 
1302  HANJIN AFRICA   0003W  5.00  87  642.62 
1302  HANJIN AFRICA      5.00  87  642.62 
1302  HANJIN EUROPE   0004W  40.00  131  473.40 
1302  HANJIN EUROPE     40.00  131  473.40 
1302  HANJIN KOREA   0014W  70.00  80  617.18 
1302  HANJIN KOREA      70.00  80  617.18 
1302  HANJIN NETHERLANDS  0010W  60.00  57  778.15 
1302  HANJIN NETHERLANDS    60.00  57  778.15 
1302  HANJIN UNITED KINGDOM 0008W  80.00  83  520.64 
1302  HANJIN UNITED KINGDOM   80.00  83  520.64 
1302          255.00 438  581.88 

我想这样的输出:

 
PERIOD Skibsnavn    Voyage  Total DKK Teus  Pr. teu 
1301 HANJIN ASIA    0004W  10.00  61  493.29  
1301 HANJIN ITALY    0010W  60.00  53  510.49 
1301 HANJIN SPAIN    0009W  100.00  74  526.11 
1301          170.00  188  511.06 
1302 HANJIN AFRICA   0003W  5.00  87  642.62  
1302 HANJIN EUROPE   0004W  40.00  131  473.40  
1302 HANJIN KOREA    0014W  70.00  80  617.18 
1302 HANJIN NETHERLANDS  0010W  60.00  57  778.15  
1302 HANJIN UNITED KINGDOM 0008W  80.00  83  520.64  
1302          255.00  438  581.88 

这可能吗?

+0

很难说没有输入数据(并考虑到如此严重的格式化你的输出),但不会环绕你的语句中一个SELECT * FROM(<你这里查询>)航行不是NULL? –

+0

如果您使用GROUP BY汇总(“STAT $ DAN_2013”​​.PERIOD),“STAT $ DAN_2013”​​.VESSEL_NAME,“STAT $ DAN_2013”​​.VOYAGE_NO',会发生什么情况? –

+0

它总结了表格底部的每一行 - 它不会为每个周期进行总计 - 就像第一个输出一样,只是它已经将它拖到了最后,并且没有每个周期的总和 – user2935782

回答

2

试试这个:

SELECT "STAT$DAN_2013".PERIOD, "STAT$DAN_2013".VESSEL_NAME AS "Skibsnavn", "STAT$DAN_2013".VOYAGE_NO AS "Voyage", SUM("STAT$DAN_2013".CREDIT_AMOUNT) - SUM("STAT$DAN_2013".DEBET_AMOUNT) AS "Total DKK", SUM("STAT$DAN_2013".TEUS) AS "Teus", (SUM("STAT$DAN_2013".CREDIT_AMOUNT) - SUM("STAT$DAN_2013".DEBET_AMOUNT))/SUM("STAT$DAN_2013".TEUS) AS "Pr. teu" 
FROM SCAN."STAT$DAN_2013" "STAT$DAN_2013" 
WHERE "STAT$DAN_2013".DEPARTMENT=107 AND "STAT$DAN_2013".PERIOD<1307 
GROUP BY rollup("STAT$DAN_2013".PERIOD, ("STAT$DAN_2013".VESSEL_NAME, "STAT$DAN_2013".VOYAGE_NO)) 
ORDER BY "STAT$DAN_2013".PERIOD, "STAT$DAN_2013".VESSEL_NAME, "STAT$DAN_2013".VOYAGE_NO; 

我在ROLLUP添加的最后两列加上括号。

我高度推荐这篇文章由蒂姆·霍尔:Cube, Rollup and GROUPING functions

+0

非常感谢! !这正是我需要的! – user2935782