Cześć,
poniżej wklejam zapytanie, którego celem jest wydobycie pewnych danych z bazy (szczegóły poniżej).
Tak ogólnie to mam 3 główne tabele, gdzie:
cdn.vatnag - przechowywane są dane nagłówkowe dokumentu (faktury)
cdn.vattab - przechowywane są pozycje faktury z tym, że każda pozycja składa się z dwóch kategorii (kategoria i kategoria2)
cdn.kategorie - tabela z kategoriami (kod/nazwa, opis itp).
Problem jest taki, że kategoria2 nie musi być zawsze uzupełniona (może być NULL).
Szukam sposobu, by tak zapisać zapytanie, by otrzymać sumę kwot dla każdej kombinacji kategorii oddzielnie tzn. jeśli obie kategorie są uzupełnione to potrzebuję sumę dla każdej występującej kombinacji tych obu kategorii. Natomiast jak jest jedna kategoria uzupełniona (bez kategoria2) to potrzebuję sumę dla wszystkich pozycji z podziałem na pierwszą kategorię (bez uwzględniania pozycji, gdzie jest ustawiona druga kategoria).
Mam nadzieję, że w miarę jasno to opisałem.
Problem jest taki, że jak w warunku wstawię samo
(...) AND (VAT_KAT2ID = B.KAT_KATID OR VAT_KAT2ID is Null) AND (...)
to otrzymuję sumę dla każdej możliwej kategorii (iloraz kartezjański). Musze to ograniczyć tylko do jednej kategorii. Wymyśliłem, że dodam:
AND B.KAT_KATID = 1
Ale może się zdarzyć, że kategoria o takim ID zostanie wykasowana...
Szukam więc alternatywy.
Proszę więc o pomoc w konstrukcji zapytania zgodnie z opisem powyżej - tj. by otrzymać sumę kwot dla każdej występującej kombinacji kategorii (dodatkowo z podziałem na okres).
Z góry dziękuję za pomoc!
Kod całego zapytania:
SELECT
VAN_PODMIOTTYP AS PODMIOTU_TYP,
VAN_PODID AS PODMIOT_ID,
A.KAT_KODSZCZEGOL AS KATEGORIA,
CASE
WHEN VAT_KAT2ID is Null THEN 'NULL'
WHEN VAT_KAT2ID is not Null THEN B.KAT_KODSZCZEGOL
END AS KATEGORIA2,
A.KAT_OPIS AS OPIS,
100*YEAR(VaN_DataWys)+MONTH(VaN_DataWys) AS OKRES,
VaN_KntNazwa1 AS PODMIOT_NAZWA,
sum(vat_netto) AS SUMA
FROM
cdn.vattab,
cdn.vatnag,
CDN.KATEGORIE A,
CDN.KATEGORIE B,
CDn.RptZaznaczenia2
WHERE
vat_vanid = van_vanid AND
VAT_KATID = A.KAT_KATID AND
(VAT_KAT2ID = B.KAT_KATID OR
VAT_KAT2ID is Null AND B.KAT_KATID = 1) AND --Jak zastąpić B.KAT_KATID = 1 ???
rpz2_GIDNumer = van_Vanid AND
(??_NQCDN_FiltrApp) --to jest filtr aplikacji
GROUP BY
A.Kat_KodSzczegol,
CASE
WHEN VAT_KAT2ID is Null THEN 'NULL'
WHEN VAT_KAT2ID is not Null THEN B.KAT_KODSZCZEGOL
END,
A.KAT_OPIS,
VaN_PodmiotTyp,
VaN_PodID,
VaN_KntNazwa1,
100*YEAR(VaN_DataWys)+MONTH(VaN_DataWys)
ORDER BY
VaN_PodmiotTyp, VaN_PodID, 100*YEAR(VaN_DataWys)+MONTH(VaN_DataWys)