Pomyślałem i zrobiłem na razie tyle czyli rozdzielenie zapytania dla FS i dla WZ:
Kod: Zaznacz cały
SELECT
CDN.TraElem.TrE_GIDNumer,
SUM(CDN.TraElem.TrE_KsiegowaNetto) AS FIELD_1,
SUM(CDN.TraElem.TrE_KosztKsiegowy) AS FIELD_2,
(SUM(CDN.TraElem.TrE_KsiegowaNetto) - SUM(CDN.TraElem.TrE_KosztKsiegowy)) AS [Marża],
CDN.TraNag.TrN_DokumentObcy,
CDN.TraNag.TrN_Data3
FROM
CDN.TraElem
INNER JOIN CDN.TraNag ON (CDN.TraElem.TrE_GIDTyp = CDN.TraNag.TrN_GIDTyp)
AND (CDN.TraElem.TrE_GIDNumer = CDN.TraNag.TrN_GIDNumer)
WHERE
CDN.TraElem.TrE_GIDTyp IN (2001)
GROUP BY
CDN.TraElem.TrE_GIDNumer,
CDN.TraNag.TrN_DokumentObcy,
CDN.TraNag.TrN_Data3
UNION
SELECT
CDN.TraElem.TrE_GIDNumer,
SUM(CDN.TraElem.TrE_KsiegowaNetto) AS FIELD_1,
SUM(CDN.TraElem.TrE_KosztKsiegowy) AS FIELD_2,
(SUM(CDN.TraElem.TrE_KsiegowaNetto) - SUM(CDN.TraElem.TrE_KosztKsiegowy)) AS [Marża],
CDN.TraNag.TrN_DokumentObcy,
CDN.TraNag.TrN_Data3
FROM
CDN.TraElem
INNER JOIN CDN.TraNag ON (CDN.TraElem.TrE_GIDTyp = CDN.TraNag.TrN_GIDTyp)
AND (CDN.TraElem.TrE_GIDNumer = CDN.TraNag.TrN_GIDNumer)
WHERE
CDN.TraElem.TrE_GIDTyp IN (2033)
GROUP BY
CDN.TraElem.TrE_GIDNumer,
CDN.TraNag.TrN_DokumentObcy,
CDN.TraNag.TrN_Data3
ORDER BY
CDN.TraNag.TrN_Data3,
CDN.TraElem.TrE_GIDNumer
Robi się zawile. No i coraz łatwiej się rypnąć sprawiając że te łączone tabele się rozjadą.
UPDATE:
Można przyjąć że nie interesują nas WZ nie spięte do (S)FS. Wynika to z tego będziemy szukać spinacza do tych WZ bo atrybut będzie nadany spinaczowi a nie WZ. Zatem tak na szybko można poprawić jeden z SELECT'ów i rozszerzyć w nim warunek:
Kod: Zaznacz cały
WHERE CDN.TraElem.TrE_GIDTyp IN (2001) AND CDN.TraNag.TrN_SPITyp=2033
Teraz mamy pewność że wybierzemy tylko te WZ które są spiete do faktury (S)FS. Problem jest teraz innej natury jak - w oparciu o to zapytanie:
Kod: Zaznacz cały
SELECT
CDN.TraElem.TrE_GIDNumer,
SUM(CDN.TraElem.TrE_KsiegowaNetto) AS FIELD_1,
SUM(CDN.TraElem.TrE_KosztKsiegowy) AS FIELD_2,
(SUM(CDN.TraElem.TrE_KsiegowaNetto) - SUM(CDN.TraElem.TrE_KosztKsiegowy)) AS [Marża],
CDN.TraNag.TrN_DokumentObcy,
CDN.TraNag.TrN_Data3
FROM
CDN.TraElem
INNER JOIN CDN.TraNag ON (CDN.TraElem.TrE_GIDTyp = CDN.TraNag.TrN_GIDTyp)
AND (CDN.TraElem.TrE_GIDNumer = CDN.TraNag.TrN_GIDNumer)
WHERE
CDN.TraElem.TrE_GIDTyp IN (2001) AND
CDN.TraNag.TrN_SPITyp = 2033
GROUP BY
CDN.TraElem.TrE_GIDNumer,
CDN.TraNag.TrN_DokumentObcy,
CDN.TraNag.TrN_Data3
ORDER BY
CDN.TraNag.TrN_Data3,
CDN.TraElem.TrE_GIDNumer
Dotrzeć poziom wyżej czyli do spinaczy. Mam już WZ co do których wiem że mają spinacz, pogrupowałem je po GIDNumerach, zsumowałem kolumny KwotaNetto i KosztKsiegowy, policzyłem marżę ale teraz dla tych GIDNumerów po których grupowałem chciałbym poznać GIDNumer rodzica wskazując kurde balans na tą samą tabelę. Jak złącze TraNag z samą sobą po kolumnach TrNGIDNumer oraz TrN_SpiNumer to kupa - pusto. Zresztą wcale mnie to nie dziwi. Znowu utknąłem.
Kyniu