2013-10-31 35 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