1.业务背景:组合促销。向商品表插入6种商品。
代码 名称 价格(元) 单位
1001 五香瓜子 8.80 袋
1002 奶香瓜子 8.80 袋
1003 原味瓜子 7.60 袋
1101 菲律宾芒果干 10.20 袋
1102 越南椰片 8.60 袋
1103 泰国芒果冰 10.00 袋
单位都为个(袋装)。组的概念:组内每个商品都买一个,即可归为一组。比如1001买了5个,1002买了3个,1003买了2个,那么这个只能称为2组。一笔流水当含有所有促销组商品时才能为实行了组合促销,可能也包含多种组合(比如上面的6种商品都在一个流水里,则人为此但含有A,B2个组合促销)。
要求:统计某一段时间内促销组的销售情况。门店代码 门店名称 A组销售金额:1001,1002,1003 B组销售金额:1101,1102,1103
PS:此为LPPZ最近的一个报表需求,如有不懂可以在群里问。需要模拟向流水表和明细表插入模拟数据。
create table buy (--销售流水表(BUY):
flowno varchar2(20), --销售流水号 201307010001
posno varchar2(8), --收银机代码 c100101 1
emp varchar2(8), --收银员代码
amt number(8,2), --应收金额
realamt number(8,2), --实收金额
realnum number(8,3), -- 商品数量 m
fildate date, --记录时间
sgid number(8), --门店id
);
create table buy2(-- 销售明细表(BUY2):
flowno varchar2(20), --销售流水号
gcode varchar2(8), --商品代码
grpc number(8,2), --商品零售价
gnum number(8,3), --购物商品数量
amt number(8,2), --应收金额
realamt number(8,2), --实收金额
);
create table goods(
gcode number,
gname varchar2(50),
price number(7,2),
unit varchar2(10)
);
create table store(--门店表
sgid number(8), --门店ID
scode varchar(10), --门店代码
sname varchar(50), --门店名称
slv number(1) --门店等级 1-5
);
insert into goods values(1001,'五香瓜子',8.80,'袋');
insert into goods values(1002,'奶香瓜子',8.80,'袋');
insert into goods values(1003,'原味瓜子',7.6,'袋');
insert into goods values(1101,'菲律宾芒果干',10.2,'袋');
insert into goods values(1102,'越南椰片',8.60,'袋');
insert into goods values(1103,'泰国芒果冰',10,'袋');
commit;oracle
代码 名称 价格(元) 单位
1001 五香瓜子 8.80 袋
1002 奶香瓜子 8.80 袋
1003 原味瓜子 7.60 袋
1101 菲律宾芒果干 10.20 袋
1102 越南椰片 8.60 袋
1103 泰国芒果冰 10.00 袋
单位都为个(袋装)。组的概念:组内每个商品都买一个,即可归为一组。比如1001买了5个,1002买了3个,1003买了2个,那么这个只能称为2组。一笔流水当含有所有促销组商品时才能为实行了组合促销,可能也包含多种组合(比如上面的6种商品都在一个流水里,则人为此但含有A,B2个组合促销)。
要求:统计某一段时间内促销组的销售情况。门店代码 门店名称 A组销售金额:1001,1002,1003 B组销售金额:1101,1102,1103
PS:此为LPPZ最近的一个报表需求,如有不懂可以在群里问。需要模拟向流水表和明细表插入模拟数据。
create table buy (--销售流水表(BUY):
flowno varchar2(20), --销售流水号 201307010001
posno varchar2(8), --收银机代码 c100101 1
emp varchar2(8), --收银员代码
amt number(8,2), --应收金额
realamt number(8,2), --实收金额
realnum number(8,3), -- 商品数量 m
fildate date, --记录时间
sgid number(8), --门店id
);
create table buy2(-- 销售明细表(BUY2):
flowno varchar2(20), --销售流水号
gcode varchar2(8), --商品代码
grpc number(8,2), --商品零售价
gnum number(8,3), --购物商品数量
amt number(8,2), --应收金额
realamt number(8,2), --实收金额
);
create table goods(
gcode number,
gname varchar2(50),
price number(7,2),
unit varchar2(10)
);
create table store(--门店表
sgid number(8), --门店ID
scode varchar(10), --门店代码
sname varchar(50), --门店名称
slv number(1) --门店等级 1-5
);
insert into goods values(1001,'五香瓜子',8.80,'袋');
insert into goods values(1002,'奶香瓜子',8.80,'袋');
insert into goods values(1003,'原味瓜子',7.6,'袋');
insert into goods values(1101,'菲律宾芒果干',10.2,'袋');
insert into goods values(1102,'越南椰片',8.60,'袋');
insert into goods values(1103,'泰国芒果冰',10,'袋');
commit;oracle
realamt number(8,2), --实收金额
入手,组合促销应该有个促销比率
select sum(a) from(
select sum(realamt) a from buy2 where gcode='10001' and amt/realamt=a and flowno in (select flowno from buy where date between date1 and date2) union all
select sum(realamt) b from buy2 where gcode='10002' and amt/realamt=b and flowno in (select flowno from buy where date between date1 and date2) union all
select sum(realamt) b from buy2 where gcode='10003' and amt/realamt=c and flowno in (select flowno from buy where date between date1 and date2))
from
(
select c.sgid,sum(c.cntA) sumA,sum(c.cntB) sumB
from
(
select
(select nvl(min(a.gnum) , 0) from buy2 a where a.gcode in (1001,1002,1003) and a.flowno = b.flowno group by a.flowno) cntA,
(select nvl(min(a.gnum) , 0) from buy2 a where a.gcode in (1101,1102,1103) and a.flowno = b.flowno group by a.flowno) cntB,
b.flowno flowno,
b.sgid sgid,
from (select flowno,sgid from buy where fildate between date1 and date2 group by sgid,flowno) b
) c
) d,
store e
where d.sgid = e.sgid