Próbuję napisać zapytanie do bazy danych, aby wyliczył mi stan poszczególnych indeksów w magazynie na okres całego roku, z przeskokiem na co miesiąc.
Czyli ma to być mniej więcej tak:
Pozycja | sztuk Styczen | styczen wartosc (aż do grudnia) | jednostka | magazyn | opis
A | 299 | 323,98 | kg | Głowny | kilo mąki
B | 32 | 38,33 | szt | Zapas | worek mięcha
Cały stan (zakup i sprzedaż) pozycji jest w jednej tabeli, kilka dodatkowych detali są pobierane z innej tabeli.
Kłopot jest w tym, że w jakiś sposób wywala mi błąd, że przekroczono limit 256 tabel. Mogę napisać zapytanie do 3 miesięcy, to jeszcze działa, a jak chcę już 4 - 5 miesięcy, to limit przekroczony. Dodam, że w tabeli jest około 100,000 rekordów, więc wykonanie zapytania do 3 miesięcy trwa około 1 minuty (może taka kiepska optymalizacja, nie wiem).
Nie wiem do końca jak sobie z takim czymś poradzić, próbowałem z dodatkową tabelą, aby w niej zapisać wynik, ale też nie dało to rezultatu.
Moje zapytanie, które jeszcze działa, wygląda tak:
SELECT PLA.ITEMNMBR, PLA.TRXLOCTN,
isnull((SELECT SUM(TRXQTY) FROM PLIV100 WHERE (PLA.ITEMNMBR = ITEMNMBR) AND (DOCDATE <= '2014-01-31') AND (PLA.TRXLOCTN = TRXLOCTN)),0) AS 'Styczeń ilość',
isnull((SELECT SUM(EXTDCOST) FROM PLIV100 WHERE (PLA.ITEMNMBR = ITEMNMBR) AND (DOCDATE <= '2014-01-31') AND (PLA.TRXLOCTN = TRXLOCTN)),0) AS 'Styczeń wartość',
isnull((SELECT SUM(TRXQTY) FROM PLIV100 WHERE (PLA.ITEMNMBR = ITEMNMBR) AND (DOCDATE <= '2014-02-28') AND (PLA.TRXLOCTN = TRXLOCTN)),0) AS 'Luty ilość',
isnull((SELECT SUM(EXTDCOST) FROM PLIV100 WHERE (PLA.ITEMNMBR = ITEMNMBR) AND (DOCDATE <= '2014-02-28') AND (PLA.TRXLOCTN = TRXLOCTN)),0) AS 'Luty wartość',
isnull((SELECT SUM(TRXQTY) FROM PLIV100 WHERE (PLA.ITEMNMBR = ITEMNMBR) AND (DOCDATE <= '2014-03-31') AND (PLA.TRXLOCTN = TRXLOCTN)),0) AS 'Marzec ilość',
isnull((SELECT SUM(EXTDCOST) FROM PLIV100 WHERE (PLA.ITEMNMBR = ITEMNMBR) AND (DOCDATE <= '2014-03-31') AND (PLA.TRXLOCTN = TRXLOCTN)),0) AS 'Marzec wartość'
FROM PLIV100 PLA
GROUP BY PLA.ITEMNMBR, PLA.TRXLOCTN
Jak sobie z tym poradzić ? Bo mogę wszystko wrzucić do Excela i tam formułą policzyć, ale wtedy Excel z taką dużą ilością danych będzie trochę mielić i potem zapisać będzie trochę trwało.