В Супермаге отчет не делал. По факту, такой отчет слишком слабо востребован.
Писал запрос, пользователи гоняли в QueryReporter от Allround Automations
Их обычно всего и находится один-два на сеть, таких любопытных.
Играются месяц-другой и забивают на это дело.
Нашел в запасниках, откомментировал. Развлекайтесь.
Совсем не боролся с парами сочетаний, моим пользователям не мешало:
если на первом месте у меня сочетание томаты-огурцы, то на втором обязательно будут огурцы-томаты :)
скрытое
Код:
select a1, a2, count(*) as c, c1.shortname as n1, c2.shortname as n2
from smcard c1, smcard c2,
(select i1.article as a1, i2.article as a2
from smcashcheckitems i1, smcashcheckitems i2, smcashz z,
smcard crd1, smcard crd2, svcardtreesplit tr1, svcardtreesplit tr2
where i1.locid=i2.locid
and i1.desknum=i2.desknum
and i1.znum=i2.znum
and i1.checknum=i2.checknum
and crd1.article=i1.article and tr1.id=crd1.idclass
and crd2.article=i2.article and tr2.id=crd2.idclass
and NOT i1.item=i2.item -- пересечения позиции самой с собой пропустим
and NOT i1.article=i2.article -- повторения одного и того же товара внутри чека пропустим
-- пересечения внутри группы - штука для анализа неоднозначная. думайте сами, надо вам или нет.
-- and NOT tr1.tree=tr2.tree -- пересечения внутри одной и той же группы товаров пропустим
-- фильтры для подбора сочетаний товаров из конкретных групп (какую водку выставить палетой возле пельменей)
and tr1.tree like '&Код_Группы_1%' -- можно не указывать при запуске
and tr2.tree like '&Код_Группы_2%' -- можно не указывать при запуске
-- артикулы-исключения (пакеты и т.п.). исключения подбираются по результатам тестовых запусков - сразу видно, что хочется убрать.
and i1.article not in ('012457','022823','012808')
and i2.article not in ('012457','022823','012808')
and i1.locid=z.locid
and i1.desknum=z.desknum
and i1.znum=z.znum
and z.closedate>=to_date('&ДатаНач','DD.MM.YYYY')
and z.closedate<=to_date('&ДатаКон','DD.MM.YYYY')) p
where c1.article=a1 and c2.article=a2
group by a1, a2, c1.shortname, c2.shortname
having count(*)>=&Порог -- сколько раз должно повториться сочетание в разных чеках, чтобы попасть в отчет.
order by count(*) desc