SQL Oracle ROLLUP неправильно суммирует

Я хочу сделать сумму после каждого периода (я хочу суммировать «Всего DKK», «Teus» и «pr. teu»)

У меня есть следующий SQL:

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

Это возможно?


person user2935782    schedule 31.10.2013    source источник
comment
Трудно сказать без входных данных (и учитывая, что ваши выходные данные так плохо отформатированы), но не будет ли ваш оператор заключен в SELECT * FROM (‹ваш запрос здесь›) WHERE Voyage IS NOT NULL?   -  person Frank Schmitt    schedule 31.10.2013
comment
Что произойдет, если вы GROUP BY rollup("STAT$DAN_2013".PERIOD), "STAT$DAN_2013".VESSEL_NAME, "STAT$DAN_2013".VOYAGE_NO?   -  person Nikola Markovinović    schedule 31.10.2013
comment
Он суммирует каждую строку в нижней части таблицы - он не делает суммы за каждый период - Как и первый вывод, только он отбрасывает его в конец и без сумм за каждый период   -  person user2935782    schedule 31.10.2013


Ответы (1)


Попробуй это:

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 и GROUPING

person Przemyslaw Kruglej    schedule 31.10.2013
comment
Спасибо большое!! это было как раз то, что мне было нужно! - person user2935782; 31.10.2013