我有以下架构:
PRODUCT_MASTER_TB
PRODUCT_CODE CATEGORY MODEL_GROUP
A 1 1
B 1 1
C 1 2
D 1 2
E 2 2
SALES_TB
SALES_DATE PRODUCT_CODE SOLD_QTY
20150101 A 2
20150101 A 3
20150102 A 4
20150102 B 5
20150103 B 6
20150104 C 7
...
我想从这两个表中选择的是每个产品代码的总销售数量,具体取决于产品代码所属的类别和型号组。
例如:
Sales date from 20150101 - 20150104
PRODUCT_CODE SOLD_QTY_FOR_CATEGORY_MODEL
A 20
B 20
C 7
...
A和B具有相同的类别和model_group,因此如果你添加他们卖出的数量,你可以获得20个(2 + 3 + 4 + 5 + 6)
我考虑过使用fetch来解决上述问题,但有没有办法使用连接来获得我想要的结果?
答案 0 :(得分:1)
您可以在子查询中根据category
和model_group
进行汇总,并使用product_master_tb
加入left join
,以获取所有产品的结果,如果没有在给定日期范围内销售的数量,此类产品将返回零
select pmt.PRODUCT_CODE , isnull(t.soldqty,0) as SOLD_QTY_FOR_CATEGORY_MODEL
from PRODUCT_MASTER_TB pmt
left JOIN (
select pmt.CATEGORY, pmt.MODEL_GROUP, SUM(sold_qty) soldqty
from PRODUCT_MASTER_TB PMT
join SALES_TB ST
on pmt.PRODUCT_CODE = st.PRODUCT_CODE
where SALES_DATE between '20150101' and '20150104'
GROUP BY PMT.CATEGORY, pmt.MODEL_GROUP ) t
on pmt.MODEL_GROUP = t.MODEL_GROUP
and pmt.CATEGORY = t.CATEGORY
答案 1 :(得分:0)
这是一个奇怪的要求,因为你是sold_qty
的总和的倍数。但是,想法是附加类别和模型组,然后按该信息分组:
select pm.PRODUCT_CODE, SOLD_QTY_FOR_CATEGORY_MODEL
from product_master_tb pm join
(select pm.category, pm.model_group,
sum(sold_qty) as SOLD_QTY_FOR_CATEGORY_MODEL
from sales_tb s join
product_master_tb pm
on s.product_code = pm.product_code
group by category, model_group
) cm
on pm.category = cm.category and pm.model_group = cm.model_group;
答案 2 :(得分:0)
您希望sum
和CATEGORY
之前MODEL_GROUP
,然后将该数据集加入PRODUCT_MASTER_TB
以获取相关的PRODUCT_CODE
:
with CATEGORY_MODEL as
(
select
p.CATEGORY,
p.MODEL_GROUP,
sum(s.SOLD_QTY) as SOLD_QTY_FOR_CATEGORY_MODEL
from PRODUCT_MASTER_TB as p
inner join SALES_TB as s
on s.PRODUCT_CODE = p.PRODUCT_CODE
group by
p.CATEGORY,
p.MODEL_GROUP
)
select
p.PRODUCT_CODE,
cm.SOLD_QTY_FOR_CATEGORY_MODEL
from PRODUCT_MASTER_TB as p
inner join CATEGORY_MODEL cm
on cm.CATEGORY = p.CATEGORY
and cm.MODEL_GROUP = p.MODEL_GROUP