Zwrócenie tylko dodatnich wartości SUM()

0

Cześć,

Mam problem z dodaniem warunków dla tych dwóch sum aby wyświetlały wyniki !=0. Z jakiej funkcji powinienem skorzystać?

Spójrzcie na poniższe zapytanie:

SELECT i.contract "Umiejscowienie",
       a.account_no "Konto_KG",
       a.codeno_b "MPK_KG",
       i.location_no "ID_Magazynu",
       i.part_no "Nr_indeksu",
       '&DO_DATY' "Na_dzień",
       **sum(decode(i.direction, '+', i.quantity, '-', -i.quantity,0)) "Ilość zapasu" ,
       SUM(a.value) "Wartość zapasu",**
       (select a.part_product_family from inventory_part a where a.part_no=i.part_no) "Rodzina_prod.",
       (select Inventory_Product_Family_API.Get_Description(a.part_product_family) from inventory_part a where a.part_no=i.part_no) "Opis_rodziny_produktow"
       FROM IFSAPP.INVENTORY_TRANSACTION_HIST i, 
       (select sum(debit_credit_amount) value, accounting_id, str_code, account_no, 
               codeno_b,
                codeno_c, codeno_D
               from IFSAPP.MPCCOM_ACCOUNTING
               where date_applied <= to_date('&DO_DATY','YYYY-MM-DD')
               group by accounting_id, str_code, account_no, 
               codeno_b,
                codeno_c, codeno_D) a
WHERE IFSAPP.REPORT_SYS.PARSE_PARAMETER(UPPER(i.contract), UPPER('&UMIEJSCOWIENIE')) = 'TRUE'
AND i.accounting_id = a.accounting_id
AND a.str_code = 'M1'
AND IFSAPP.REPORT_SYS.PARSE_PARAMETER(UPPER(i.location_no), UPPER('&ID_LOKALIZACJI')) = 'TRUE'
and IFSAPP.REPORT_SYS.PARSE_PARAMETER(UPPER(a.account_no), UPPER('&KONTO')) = 'TRUE'
AND trunc(i.date_applied) <= to_date('&DO_DATY','YYYY-MM-DD')
0

Na przykład HAVING SUM(a.value) <> 0 (ewentualnie !=, nie wiem co tam ma Oracle).

(sekcja where służy do wrzucania warunków na "bazowe wartości", podczas gdy sekcja having pozwala utworzyć warunek na agregat.)

0

Chcesz dostać tylko te rekordy, dla których "Ilość zapasu" i/lub "Wartość zapasu" jest różna od zera?
Najprościej to "owinąć" to zapytanie w jeszcze jeden SELECT i dać:

SELECT x.* FROM
(... obecne zapytanie) x
WHERE x."Ilość zapasu" <> 0 
OR x."Wartość zapasu" <> 0;

Ale w sumie piszesz o "dodatnich", więc może raczej: > 0

0

Ja się tam nie znam na oracle, ale skoro wgłównym zapytaniu nie ma group by to wskazywałby na to że używasz window-function, ale wtedy brakuje over to zapytanie jest poprawne.
Pytanie dodatkowe kto wyrobił ci nawyk takiego zapisu łączenia tabel?

1 użytkowników online, w tym zalogowanych: 0, gości: 1