DROP VIEW IF EXISTS FK.UniqueValidRecordAccountNumbers;
GO

CREATE VIEW FK.UniqueValidRecordAccountNumbers
AS

SELECT
    z.RokId
    , z.Syntetyka
    , z.Poziom1
    , z.Poziom2
    , z.Poziom3
    , z.Poziom4
    , z.Poziom5
    , p.listek AS Listek
FROM (
    -- ponieważ zapisy mogą zwrócić wiele kont o tych samych numerach, 
    -- to na potrzeby szybszego odpytania w kolejnej funkcji potrzebne
    -- jest tutaj zrobić DISTINCT i to jest poprawne (jest odpwiedni
    -- indeks do tego, więc nie ma problemu z wydajnością).
    SELECT DISTINCT
           z.rokId AS RokId
           , z.synt AS Syntetyka
           , z.poz1 AS Poziom1
           , z.poz2 AS Poziom2
           , z.poz3 AS Poziom3
           , z.poz4 AS Poziom4
           , z.poz5 AS Poziom5
    FROM FK.zapisy AS z
) AS z
-- w tym przypadku, CROSS APPLY robi nam za odfiltorwanie tych numerów kont z zapisów, który nie istnieją w planie kont
CROSS APPLY FK.GetAccountPlanId(z.RokId, z.Syntetyka, z.Poziom1, z.Poziom2, z.Poziom3, z.Poziom4, z.Poziom5) AS gapi
JOIN FK.plankont AS p ON p.rokId = gapi.YearId AND p.id = gapi.Id;
