svajuke rašė:
Laba diena,
Problema: Kartais suvedinėjant banko operacijas pasitaiko, kad nurodome korespondencinę sąskaitą 4431, pvz pirkėjui, kuriam grąžinamas avansas, kuris kontrahentuose nepažymėtas kaip tiekėjas, todėl Tiekėjų skolų ataskaitoje tokia operacija neatsispidi.
Kokie SQL sakiniai galėtų padėti išgaudyti panašius atvejus iš Tiekėjų 4431 (kai 4431 sąskaitoje operacija vyko ne su Tiekėju) ir Pirkėjų 2411 (kai 2411 sąskaitoje operacija vyko ne su Pirkėju) sąskaitų?
SELECT a.ID, a.Pavad, a.Kodas, a.SP_kodas, a.Adresas,
(SELECT CONVERT(GROUP_CONCAT(g.Name SEPARATOR ', '), CHAR) FROM persons_group_assignments d LEFT JOIN persons_group g ON g.ID=d.GroupID WHERE d.PersonsID=a.ID GROUP BY d.PersonsID) AS PersonGroups,
SUM(CASE WHEN f.Op_tipas='Debetas' AND b.Op_data=?DF THEN f.Op_suma ELSE 0 END) AS DebetTurnover,
SUM(CASE WHEN f.Op_tipas='Kreditas' AND b.Op_data>=?DF THEN f.Op_suma ELSE 0 END) AS CreditTurnover
FROM bzdata f
LEFT JOIN bz b ON b.Op_ID=f.Op_ID_BZ
LEFT JOIN asmenys a ON a.ID=f.Op_ana OR (f.Op_ana<1 AND a.ID=b.Op_analitika)
WHERE f.Op_saskaita=?AC AND b.Op_data<=?DT AND
(?CG<1 OR (SELECT COUNT(z.GroupID) FROM persons_group_assignments z WHERE z.PersonsID=a.ID AND z.GroupID=?CG)>0) GROUP BY a.ID ORDER BY a.Pavad;
svajuke rašė: Ir papildomai ateičiai: Gal geriau būtų, kad šios ataskaitos visgi parašytų atsakymą, nereaguojant į tai, ar konkretus kontrahentas yra pirkėjas, tiekėjas, ar darbuotojas, jei galutinė suma nėra lygi 0, o įtrauktų jį į ataskaitą?
Gal ateityje padarysiu varnelę reagavimui išjungti.