a表是物理表:库存表。b,c表是库存表和其他业务(调拨,销售)产生的虚拟表
a表:
id logic now
编号 可用库存, 实际库存
b表:b表是列出经过 调拨,使可用库存变化的表
c表:c表是列出经过 销售,使可用库存变化的表
下面要列出可用库存改变(调拨/销售)的数据,并将该数据对库存表a表中的可用库存进行对比
也就是 b,c两个表求合集,再和 a表求交集也就是说要求
ex:
a表id:1,2,3,4,5,6,7,8,9
b表:id:2,3,4
c表:id:4,5,7
先b,c表求合集得到的id为:2,3,4,5,7.。。
再拿b,c表的合集2,3,4,5,7 和a表的id为:2,3,4,5,7比较可用库存
25 个解决方案
#1
我写的sql只能得到a,b,c3个表的交集
这样运算后根据上面的例子只有id=4的能显示出来。
而我实际需求是2,3,4,5,7的显示出来。
select a.id
from a, b, c
where a.id = b.id
and a.id = c.id
这样运算后根据上面的例子只有id=4的能显示出来。
而我实际需求是2,3,4,5,7的显示出来。
#2
实际SQL:
--库存管理,调拨数量改变可用库存
--库存管理,销售数量改变可用库存
select c.sc_tt_stock_id,c.warehouse_name, c.product_no
from
(
select w.ware_id "仓库编号", w.ware_name "仓库名称", pi.product_no "货号", pi.product_name "商品名", s.stock_logic "页面显示可用库存" ,s.stock_now "页面显示实物库存",
pt.transfer_num "已录入状态调拨数量", (s.stock_now-pt.transfer_num) "实际可用库存",
w.sc_tm_warehouse_id wid, pi.sc_tm_product_info_id piid
from sc_tt_stock s, sc_tt_product_transf pt, sc_tt_prd_trsf_info pti, sc_tm_product_info pi, sc_tm_warehouse w
where 1=1
and s.sc_tm_product_info_id = pi.sc_tm_product_info_id
and pti.sc_tm_product_info_id = pi.sc_tm_product_info_id
and pt.sc_tt_product_transf_id = pti.sc_tt_product_transf_id
and s.sc_tm_warehouse_id = pt.transfer_out_ware_id
and s.sc_tm_warehouse_id = w.sc_tm_warehouse_id
and pt.transfer_status = '1' --调拨单已录入状态)
)a,
(
select w.ware_id "仓库编号", w.ware_name "仓库名称", pi.product_no "货号", pi.product_name "商品名", s.stock_logic "页面显示可用库存" ,s.stock_now "页面显示实物库存",
dsd.num "已提交销售数量", (s.stock_now-dsd.num) "实际可用库存",
w.sc_tm_warehouse_id wid, pi.sc_tm_product_info_id piid
from sc_tt_stock s, sc_tm_product_info pi, sc_tt_dealer_sale_info dsi, sc_tt_dealer_sale_dtl dsd, sc_tm_warehouse w
where 1=1
and s.sc_tm_product_info_id = pi.sc_tm_product_info_id
and dsd.sc_tm_product_info_id = pi.sc_tm_product_info_id
and s.sc_tm_warehouse_id = w.sc_tm_warehouse_id
and dsi.sc_tm_warehouse_id = w.sc_tm_warehouse_id
and dsd.sc_tt_dealer_sale_info_id = dsi.sc_tt_dealer_sale_info_id
and dsi.status = '1' --销售单已提交状态
)b,
sc_tt_stock c
where 1=1
and a.wid = c.sc_tm_warehouse_id
and b.wid = c.sc_tm_warehouse_id
and a.piid = c.sc_tm_product_info_id
and b.piid = c.sc_tm_product_info_id
#3
-----先吧b,c union all,然后使用a表minus求差集
select id
from a
minus (select id
from b
union all
select id from c)
#4
-----b,c union all,然后外连接a表
select aa.id from
(select id from b
union all
select id from c) aa
left outer join a
on aa.id=a.id
#5
select a.id from a,(select id from b union select id from c)v
where a.id=v.id
#6
如何是b,c求交集呢??
也就是说找出既有调拨,又有销售的仓库某商品。
也就是说找出既有调拨,又有销售的仓库某商品。
#7
直接b.id = c.id
#8
谢谢大家。。。b表有一个调拨数量t_num, c表有一个销售数量s_num...
两表合集后,怎么得到一个“调拨+销售”的总数量呢???/
两表合集后,怎么得到一个“调拨+销售”的总数量呢???/
#9
select b.t_num+c.s_num
from b,c
where b.id = c.id
from b,c
where b.id = c.id
#10
如上所示,b表有一个调拨数量t_num, c表有一个销售数量s_num。
我不单要列出a.id,还要列出b.t_num, c.s_num, (b.t_num+c.s_num)
这个怎么写。我把这些字段加上去后报错。。。
#11
select ,b.t_num,c.s_num,b.t_num+c.s_num
from b,c
where b.id = c.id
from b,c
where b.id = c.id
#12
-----
请问怎么加上这些列。。
#13
如上所示,b表有一个调拨数量t_num, c表有一个销售数量s_num。
我不单要列出a.id,还要列出b.t_num, c.s_num, (b.t_num+c.s_num)
这个怎么写。我把这些字段加上去后报错。。。
#14
我加上t_num, s_num后就报错啊。。求正确SQL。
-----b,c union all,然后外连接a表
select aa.* from
(select b.id, b.t_num from b
union all
select c.id, c.s_num from c) aa
left outer join a
on aa.id=a.id
--加上 b.t_num, c.s_num后报错。。显示不正确的列数。请问要怎样才能正确显示需要的t_num, s_num
#15
--------这样嘛。。
select aa.id, sum(t_num), sum(s_num), sum(t_sum + s_num)
from (select b.id, b.t_num t_num, null s_num
from b
union all
select c.id, null t_num, c.s_num from c) aa
left outer join a on aa.id = a.id
group by aa.id
#16
没看下面一堆SQL,只看了第一帖里的说明
说一下个人理解,看是不是楼主想要的
数据库中,分别存储了 库存、调拨、销售 3 种不同的数据
这些数据,从业务上来看,应当是有关联的,最终都会影响库存(至于可用、实际之间的区别,暂时不明)
那么,从仓管角度来说,是要将这些影响直接生成一个 明细表,可以展示每种ID(物品)的情况,以便于实时管理。 对销售来说,则可以知道是否有货; 对采购与生产来说,则知道是否需要补货或加班生产。
基于以上分析,则应当,以库存表为基础(仓库中所有物品),再 加上 实时发生的影响 - 调拨与销售, 产生最终的明细表
即,
select a.id
,sum(a.库存) 库存量
,sum(b.库存影响) 调拨量
,sum(c.库存影响) 销售量
,sum(a.库存) - sum(b.库存影响) - sum(c.库存影响) 结余量
from 库存 a
left join 调拨 b on a.id = b.id
left join 销售 c on a.id = c.id
group by a.id
说一下个人理解,看是不是楼主想要的
数据库中,分别存储了 库存、调拨、销售 3 种不同的数据
这些数据,从业务上来看,应当是有关联的,最终都会影响库存(至于可用、实际之间的区别,暂时不明)
那么,从仓管角度来说,是要将这些影响直接生成一个 明细表,可以展示每种ID(物品)的情况,以便于实时管理。 对销售来说,则可以知道是否有货; 对采购与生产来说,则知道是否需要补货或加班生产。
基于以上分析,则应当,以库存表为基础(仓库中所有物品),再 加上 实时发生的影响 - 调拨与销售, 产生最终的明细表
即,
select a.id
,sum(a.库存) 库存量
,sum(b.库存影响) 调拨量
,sum(c.库存影响) 销售量
,sum(a.库存) - sum(b.库存影响) - sum(c.库存影响) 结余量
from 库存 a
left join 调拨 b on a.id = b.id
left join 销售 c on a.id = c.id
group by a.id
#17
同意 就是这样
#18
select t1.id,
nvl(b.t_num, 0) t_num,
nvl(c.s_num, 0) s_num,
(nvl(b.t_num, 0) + nvl(c.s_num, 0)) sum_all
from (select id
from b
union
select id from c) t1,
b,
c
where t1.id = b.id(+)
and t1.id = c.id(+)
#19
-----------
非常感谢。。。可用列出。。。
如果还要再加一个名称呢?就是该商品的名称。。在a表中有的。
#20
个人理解,如果b,c表中的id是唯一的,那么就没必要用sum,直接先union,把b,c表中的存在的id查找出来,然后通过与b,c表分别作外关联,查找出需要的数据。如果还需要取a表中的数据,还可以通过id与a表关联查找出来
#21
select t1.id,
a.pname,
nvl(b.t_num, 0) t_num,
nvl(c.s_num, 0) s_num,
(nvl(b.t_num, 0) + nvl(c.s_num, 0)) sum_all
from (select id
from b
union
select id from c) t1,
a,
b,
c
where t1.id = a.id
and t1.id = b.id(+)
and t1.id = c.id(+)
#22
select s.sc_tm_warehouse_id "仓库编号", s.product_no "货号", s.stock_logic "页面显示可用库存", s.stock_now "页面显示实用库存",
abc.tnum "调拨数量", abc.snum "销售数量", (nvl(abc.tnum,0)+nvl(abc.snum,0)) "调拨销售总量",
(s.stock_now - (nvl(abc.tnum,0)+nvl(abc.snum,0))) "实际可用库存"
--得到可用库存发生改变的库存编号,货号,可用库存,实用库存,调拨数量,销售数量,调拨销售总量,逻辑判断后的实际可用库存
from (
select ab.sid, sum(ab.tnum) tnum, sum(ab.snum) snum from --得到可用库存发生改变的库存编号,调拨数量,销售数量
(
select a.sid, a.tnum tnum, null snum from --得到发生调拨的库存编号,调拨数量,销售数量(为空)
(
select pt.transfer_num tnum, s.sc_tt_stock_id sid
from sc_tt_stock s, sc_tt_product_transf pt, sc_tt_prd_trsf_info pti, sc_tm_product_info pi, sc_tm_warehouse w
where 1=1
and s.sc_tm_product_info_id = pi.sc_tm_product_info_id
and pti.sc_tm_product_info_id = pi.sc_tm_product_info_id
and pt.sc_tt_product_transf_id = pti.sc_tt_product_transf_id
and s.sc_tm_warehouse_id = pt.transfer_out_ware_id
and s.sc_tm_warehouse_id = w.sc_tm_warehouse_id
and pt.transfer_status = '1' --调拨单已录入状态
)a --得到调拨单改变可用库存的记录
union all
select b.sid, null tnum, b.snum snum from ( ----得到发生销售的库存编号,调拨数量(为空),销售数量
select dsd.num snum, s.sc_tt_stock_id sid
from sc_tt_stock s, sc_tm_product_info pi, sc_tt_dealer_sale_info dsi, sc_tt_dealer_sale_dtl dsd, sc_tm_warehouse w
where 1=1
and s.sc_tm_product_info_id = pi.sc_tm_product_info_id
and dsd.sc_tm_product_info_id = pi.sc_tm_product_info_id
and s.sc_tm_warehouse_id = w.sc_tm_warehouse_id
and dsi.sc_tm_warehouse_id = w.sc_tm_warehouse_id
and dsd.sc_tt_dealer_sale_info_id = dsi.sc_tt_dealer_sale_info_id
and dsi.status = '1' --销售单已提交状态
)b ----得到销售单改变可用库存的记录
) ab --union all得到调拨/销售得到改变可用库存的记录
left outer join sc_tt_stock c -- 和库存表产生交集,得到可用库存发生改变的记录
on ab.sid = c.sc_tt_stock_id
group by ab.sid
) abc, sc_tt_stock s
where 1=1
and abc.sid = s.sc_tt_stock_id
谢谢各位朋友,写出来的SQL如上所述。。。不知道怎么简化或性能变好点。。。对不对还不太清楚。。只是执行时不报错。能正常出结果。。。
#23
看你写的差不多了,主要是不清楚逻辑,也没法给你简化,感觉你重复用到了一些表,但不清楚你为什么?
#24
前期对业务不熟。。。弄的这么麻烦。。。还union all ,group by .....
其实很简单。。。就三个表就好了。。
其实很简单。。。就三个表就好了。。
select pi.product_no, pi.product_name,
pi.sale_price, p.client_retail_price, p.max_price, p.min_price,
ptd.max_make_up_rate*pi.sale_price/100, ptd.min_make_up_rate*pi.sale_price/100
--select count(p.sc_tt_price_id)
from sc_tt_price p, sc_tm_product_info pi, sc_tt_price_tmp_dtl ptd
where (p.max_price <>ptd.max_make_up_rate*pi.sale_price/100 or p.min_price<>ptd.min_make_up_rate*pi.sale_price/100)
and p.sc_tm_product_info_id = pi.sc_tm_product_info_id
and p.sc_tt_price_template_id = ptd.sc_tt_price_template_id
and pi.bland = '1'
and pi.sc_tt_bak3 = ptd.dimesion_2 --中类
and pi.grade = ptd.product_level --档次
and pi.uni_sale_price_flg= 0--非统一零售价商品
and p.status in (1 ,2) --已生成或者已发布
#25
正解!
#1
我写的sql只能得到a,b,c3个表的交集
这样运算后根据上面的例子只有id=4的能显示出来。
而我实际需求是2,3,4,5,7的显示出来。
select a.id
from a, b, c
where a.id = b.id
and a.id = c.id
这样运算后根据上面的例子只有id=4的能显示出来。
而我实际需求是2,3,4,5,7的显示出来。
#2
实际SQL:
--库存管理,调拨数量改变可用库存
--库存管理,销售数量改变可用库存
select c.sc_tt_stock_id,c.warehouse_name, c.product_no
from
(
select w.ware_id "仓库编号", w.ware_name "仓库名称", pi.product_no "货号", pi.product_name "商品名", s.stock_logic "页面显示可用库存" ,s.stock_now "页面显示实物库存",
pt.transfer_num "已录入状态调拨数量", (s.stock_now-pt.transfer_num) "实际可用库存",
w.sc_tm_warehouse_id wid, pi.sc_tm_product_info_id piid
from sc_tt_stock s, sc_tt_product_transf pt, sc_tt_prd_trsf_info pti, sc_tm_product_info pi, sc_tm_warehouse w
where 1=1
and s.sc_tm_product_info_id = pi.sc_tm_product_info_id
and pti.sc_tm_product_info_id = pi.sc_tm_product_info_id
and pt.sc_tt_product_transf_id = pti.sc_tt_product_transf_id
and s.sc_tm_warehouse_id = pt.transfer_out_ware_id
and s.sc_tm_warehouse_id = w.sc_tm_warehouse_id
and pt.transfer_status = '1' --调拨单已录入状态)
)a,
(
select w.ware_id "仓库编号", w.ware_name "仓库名称", pi.product_no "货号", pi.product_name "商品名", s.stock_logic "页面显示可用库存" ,s.stock_now "页面显示实物库存",
dsd.num "已提交销售数量", (s.stock_now-dsd.num) "实际可用库存",
w.sc_tm_warehouse_id wid, pi.sc_tm_product_info_id piid
from sc_tt_stock s, sc_tm_product_info pi, sc_tt_dealer_sale_info dsi, sc_tt_dealer_sale_dtl dsd, sc_tm_warehouse w
where 1=1
and s.sc_tm_product_info_id = pi.sc_tm_product_info_id
and dsd.sc_tm_product_info_id = pi.sc_tm_product_info_id
and s.sc_tm_warehouse_id = w.sc_tm_warehouse_id
and dsi.sc_tm_warehouse_id = w.sc_tm_warehouse_id
and dsd.sc_tt_dealer_sale_info_id = dsi.sc_tt_dealer_sale_info_id
and dsi.status = '1' --销售单已提交状态
)b,
sc_tt_stock c
where 1=1
and a.wid = c.sc_tm_warehouse_id
and b.wid = c.sc_tm_warehouse_id
and a.piid = c.sc_tm_product_info_id
and b.piid = c.sc_tm_product_info_id
#3
-----先吧b,c union all,然后使用a表minus求差集
select id
from a
minus (select id
from b
union all
select id from c)
#4
-----b,c union all,然后外连接a表
select aa.id from
(select id from b
union all
select id from c) aa
left outer join a
on aa.id=a.id
#5
select a.id from a,(select id from b union select id from c)v
where a.id=v.id
#6
如何是b,c求交集呢??
也就是说找出既有调拨,又有销售的仓库某商品。
也就是说找出既有调拨,又有销售的仓库某商品。
#7
直接b.id = c.id
#8
谢谢大家。。。b表有一个调拨数量t_num, c表有一个销售数量s_num...
两表合集后,怎么得到一个“调拨+销售”的总数量呢???/
两表合集后,怎么得到一个“调拨+销售”的总数量呢???/
#9
select b.t_num+c.s_num
from b,c
where b.id = c.id
from b,c
where b.id = c.id
#10
如上所示,b表有一个调拨数量t_num, c表有一个销售数量s_num。
我不单要列出a.id,还要列出b.t_num, c.s_num, (b.t_num+c.s_num)
这个怎么写。我把这些字段加上去后报错。。。
#11
select ,b.t_num,c.s_num,b.t_num+c.s_num
from b,c
where b.id = c.id
from b,c
where b.id = c.id
#12
-----
请问怎么加上这些列。。
#13
如上所示,b表有一个调拨数量t_num, c表有一个销售数量s_num。
我不单要列出a.id,还要列出b.t_num, c.s_num, (b.t_num+c.s_num)
这个怎么写。我把这些字段加上去后报错。。。
#14
我加上t_num, s_num后就报错啊。。求正确SQL。
-----b,c union all,然后外连接a表
select aa.* from
(select b.id, b.t_num from b
union all
select c.id, c.s_num from c) aa
left outer join a
on aa.id=a.id
--加上 b.t_num, c.s_num后报错。。显示不正确的列数。请问要怎样才能正确显示需要的t_num, s_num
#15
--------这样嘛。。
select aa.id, sum(t_num), sum(s_num), sum(t_sum + s_num)
from (select b.id, b.t_num t_num, null s_num
from b
union all
select c.id, null t_num, c.s_num from c) aa
left outer join a on aa.id = a.id
group by aa.id
#16
没看下面一堆SQL,只看了第一帖里的说明
说一下个人理解,看是不是楼主想要的
数据库中,分别存储了 库存、调拨、销售 3 种不同的数据
这些数据,从业务上来看,应当是有关联的,最终都会影响库存(至于可用、实际之间的区别,暂时不明)
那么,从仓管角度来说,是要将这些影响直接生成一个 明细表,可以展示每种ID(物品)的情况,以便于实时管理。 对销售来说,则可以知道是否有货; 对采购与生产来说,则知道是否需要补货或加班生产。
基于以上分析,则应当,以库存表为基础(仓库中所有物品),再 加上 实时发生的影响 - 调拨与销售, 产生最终的明细表
即,
select a.id
,sum(a.库存) 库存量
,sum(b.库存影响) 调拨量
,sum(c.库存影响) 销售量
,sum(a.库存) - sum(b.库存影响) - sum(c.库存影响) 结余量
from 库存 a
left join 调拨 b on a.id = b.id
left join 销售 c on a.id = c.id
group by a.id
说一下个人理解,看是不是楼主想要的
数据库中,分别存储了 库存、调拨、销售 3 种不同的数据
这些数据,从业务上来看,应当是有关联的,最终都会影响库存(至于可用、实际之间的区别,暂时不明)
那么,从仓管角度来说,是要将这些影响直接生成一个 明细表,可以展示每种ID(物品)的情况,以便于实时管理。 对销售来说,则可以知道是否有货; 对采购与生产来说,则知道是否需要补货或加班生产。
基于以上分析,则应当,以库存表为基础(仓库中所有物品),再 加上 实时发生的影响 - 调拨与销售, 产生最终的明细表
即,
select a.id
,sum(a.库存) 库存量
,sum(b.库存影响) 调拨量
,sum(c.库存影响) 销售量
,sum(a.库存) - sum(b.库存影响) - sum(c.库存影响) 结余量
from 库存 a
left join 调拨 b on a.id = b.id
left join 销售 c on a.id = c.id
group by a.id
#17
同意 就是这样
#18
select t1.id,
nvl(b.t_num, 0) t_num,
nvl(c.s_num, 0) s_num,
(nvl(b.t_num, 0) + nvl(c.s_num, 0)) sum_all
from (select id
from b
union
select id from c) t1,
b,
c
where t1.id = b.id(+)
and t1.id = c.id(+)
#19
-----------
非常感谢。。。可用列出。。。
如果还要再加一个名称呢?就是该商品的名称。。在a表中有的。
#20
个人理解,如果b,c表中的id是唯一的,那么就没必要用sum,直接先union,把b,c表中的存在的id查找出来,然后通过与b,c表分别作外关联,查找出需要的数据。如果还需要取a表中的数据,还可以通过id与a表关联查找出来
#21
select t1.id,
a.pname,
nvl(b.t_num, 0) t_num,
nvl(c.s_num, 0) s_num,
(nvl(b.t_num, 0) + nvl(c.s_num, 0)) sum_all
from (select id
from b
union
select id from c) t1,
a,
b,
c
where t1.id = a.id
and t1.id = b.id(+)
and t1.id = c.id(+)
#22
select s.sc_tm_warehouse_id "仓库编号", s.product_no "货号", s.stock_logic "页面显示可用库存", s.stock_now "页面显示实用库存",
abc.tnum "调拨数量", abc.snum "销售数量", (nvl(abc.tnum,0)+nvl(abc.snum,0)) "调拨销售总量",
(s.stock_now - (nvl(abc.tnum,0)+nvl(abc.snum,0))) "实际可用库存"
--得到可用库存发生改变的库存编号,货号,可用库存,实用库存,调拨数量,销售数量,调拨销售总量,逻辑判断后的实际可用库存
from (
select ab.sid, sum(ab.tnum) tnum, sum(ab.snum) snum from --得到可用库存发生改变的库存编号,调拨数量,销售数量
(
select a.sid, a.tnum tnum, null snum from --得到发生调拨的库存编号,调拨数量,销售数量(为空)
(
select pt.transfer_num tnum, s.sc_tt_stock_id sid
from sc_tt_stock s, sc_tt_product_transf pt, sc_tt_prd_trsf_info pti, sc_tm_product_info pi, sc_tm_warehouse w
where 1=1
and s.sc_tm_product_info_id = pi.sc_tm_product_info_id
and pti.sc_tm_product_info_id = pi.sc_tm_product_info_id
and pt.sc_tt_product_transf_id = pti.sc_tt_product_transf_id
and s.sc_tm_warehouse_id = pt.transfer_out_ware_id
and s.sc_tm_warehouse_id = w.sc_tm_warehouse_id
and pt.transfer_status = '1' --调拨单已录入状态
)a --得到调拨单改变可用库存的记录
union all
select b.sid, null tnum, b.snum snum from ( ----得到发生销售的库存编号,调拨数量(为空),销售数量
select dsd.num snum, s.sc_tt_stock_id sid
from sc_tt_stock s, sc_tm_product_info pi, sc_tt_dealer_sale_info dsi, sc_tt_dealer_sale_dtl dsd, sc_tm_warehouse w
where 1=1
and s.sc_tm_product_info_id = pi.sc_tm_product_info_id
and dsd.sc_tm_product_info_id = pi.sc_tm_product_info_id
and s.sc_tm_warehouse_id = w.sc_tm_warehouse_id
and dsi.sc_tm_warehouse_id = w.sc_tm_warehouse_id
and dsd.sc_tt_dealer_sale_info_id = dsi.sc_tt_dealer_sale_info_id
and dsi.status = '1' --销售单已提交状态
)b ----得到销售单改变可用库存的记录
) ab --union all得到调拨/销售得到改变可用库存的记录
left outer join sc_tt_stock c -- 和库存表产生交集,得到可用库存发生改变的记录
on ab.sid = c.sc_tt_stock_id
group by ab.sid
) abc, sc_tt_stock s
where 1=1
and abc.sid = s.sc_tt_stock_id
谢谢各位朋友,写出来的SQL如上所述。。。不知道怎么简化或性能变好点。。。对不对还不太清楚。。只是执行时不报错。能正常出结果。。。
#23
看你写的差不多了,主要是不清楚逻辑,也没法给你简化,感觉你重复用到了一些表,但不清楚你为什么?
#24
前期对业务不熟。。。弄的这么麻烦。。。还union all ,group by .....
其实很简单。。。就三个表就好了。。
其实很简单。。。就三个表就好了。。
select pi.product_no, pi.product_name,
pi.sale_price, p.client_retail_price, p.max_price, p.min_price,
ptd.max_make_up_rate*pi.sale_price/100, ptd.min_make_up_rate*pi.sale_price/100
--select count(p.sc_tt_price_id)
from sc_tt_price p, sc_tm_product_info pi, sc_tt_price_tmp_dtl ptd
where (p.max_price <>ptd.max_make_up_rate*pi.sale_price/100 or p.min_price<>ptd.min_make_up_rate*pi.sale_price/100)
and p.sc_tm_product_info_id = pi.sc_tm_product_info_id
and p.sc_tt_price_template_id = ptd.sc_tt_price_template_id
and pi.bland = '1'
and pi.sc_tt_bak3 = ptd.dimesion_2 --中类
and pi.grade = ptd.product_level --档次
and pi.uni_sale_price_flg= 0--非统一零售价商品
and p.status in (1 ,2) --已生成或者已发布
#25
正解!