Разделение данных по кассам
Файл с описанием основных полей для базовых таблиц продаж в кассовой схеме.
Как выполнить разделение данных о продажах по кассам?
Запрос SELECT * from tmdb_comenz - выводит "шапку" чека, где:
1. tmdb_sold - смены
Name Type Nullable Default Comments
NRDOC INTEGER Электронный номер смены
ID_CASA INTEGER Код кассы из справочника O,CASA
2. tmdb_comenz - чеки
NRDOC NUMBER(10) Y Электронный номер смены (для связи с tmdb_sold.nrdoc)
select d.* ,
(select s.id_casa from tmdb_sold s where s.nrdoc=d.nrdoc and rownum=1) id_casa
from tmdb_comenz d
and rownum=1 -> and s.sid = d.sid - если для архивной кассовой схемы
sid + nrdoc - это первичный ключ в tmdb_sold, в comenz - sid + cod и если нужно читать данные за большие периоды - лучше соединить таблицы вместо подзапроса.
Например, когда нужно читать данные за от месяца до 3-х месецев:
select --d.*
(select s.id_casa from tmdb_sold s where s.nrdoc=d.nrdoc and s.sid = d.sid) id_casa
--,(select count(s.id_casa) from tmdb_sold s where s.nrdoc=d.nrdoc ) cnt_id_casa
, d.*
from tmdb_comenz d
--order by cnt_id_casa desc
Почему кассы имеют нумерацию 101 и 102 а не 1 и 2?
101 - первый магазин, первая касса.
102 - первый магазин, вторая касса.
...
N0M - N-й магазин, M-я касса.
Ключ кассы уникален в рамках всей сети.
select ...
from tmdb_comenz c, tmdb_sold s
where c.sid = s.sid
and c.nrdoc = s.nrdoc
and trunc(c.data) between :start_date and :end_date
В зависимости от периода оптимизатор сам выберет, что эффективнее - соединять по индексу или full scan.