You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL销售报表中按ALU范围(4000000-4009999)过滤数据

筛选ALU在4000000至4009999之间的数据的SQL修改方案

方法一:在子查询的WHERE子句中添加过滤(推荐)

将ALU的过滤条件添加到子查询的WHERE部分,能在聚合计算前就过滤掉无关数据,提升查询性能。只需在现有WHERE条件后新增一行:

and i.ALU between 4000000 and 4009999

完整修改后的代码如下:

select 
       --r.sbs_name as "Subsidiary",
       r.store_code as "Store",
       r.ALU as "ALU",
       --r.dcs_code as "DCS Code",
       --r.vend_code as "Vendor Code",
       r.description1 as "Description1",
       --r.attribute as "Attribute",
       --r.item_size as "Size",
       r.qty_sold as "Qty Sold",
       round(
            case when r.ext_cost = 0
                then 0
                else (r.ext_cost / r.qty_sold)
            end, 2) as "Item Cost",
       r.ext_cost as "Total Cost",
       r.ext_price as "Total Retail"
from
(
    select s.sbs_name,
           St.Store_code,
           d.dcs_code,
           v.vend_code,
           i.description1,
           i.attribute,
           i.item_size,
           i.ALU,
           sum(decode(di.item_type, 2, di.qty * -1, di.qty)) as qty_sold,
           sum(round((decode(di.item_type, 2, di.qty * -1, di.qty) * (di.cost)), 2)) as ext_cost,
           sum(round((decode(di.item_type, 2, di.qty * -1, di.qty) * (di.price)), 2)) as ext_price
      from rps.document do
     inner join rps.document_item di
        on do.sid = di.doc_sid
     inner join rps.subsidiary s
        on do.sbs_no = s.sbs_no
       and di.sbs_no = s.sbs_no
     inner join rps.dcs d
        on s.sid = d.sbs_sid
       and di.dcs_code = d.dcs_code
     inner join rps.store st
        on do.store_sid = st.sid
     inner join rps.invn_sbs_item i
        on di.invn_sbs_item_sid = i.sid
       and s.sid = i.sbs_sid
     inner join rps.vendor v
        on i.vend_sid = v.sid
     where do.receipt_type in (0, 1)
       and di.item_type in (1, 2)
       and do.status = 4
       and =-=do.sbs_no=-=
       and =-=st.store_no=-=
       and =-=st.store_code=-=
       and =-=trunc(do.created_datetime)=-=
       and i.ALU between 4000000 and 4009999 -- 新增ALU过滤条件
    group by s.sbs_name,
           St.Store_code,
           d.dcs_code,
           v.vend_code,
           i.description1,
           i.attribute,
           i.item_size,
           i.ALU
) r     

方法二:在外层查询的WHERE子句中添加过滤

如果需要保留子查询的通用性,也可以在外层查询中添加过滤条件:

select 
       --r.sbs_name as "Subsidiary",
       r.store_code as "Store",
       r.ALU as "ALU",
       --r.dcs_code as "DCS Code",
       --r.vend_code as "Vendor Code",
       r.description1 as "Description1",
       --r.attribute as "Attribute",
       --r.item_size as "Size",
       r.qty_sold as "Qty Sold",
       round(
            case when r.ext_cost = 0
                then 0
                else (r.ext_cost / r.qty_sold)
            end, 2) as "Item Cost",
       r.ext_cost as "Total Cost",
       r.ext_price as "Total Retail"
from
(
    select s.sbs_name,
           St.Store_code,
           d.dcs_code,
           v.vend_code,
           i.description1,
           i.attribute,
           i.item_size,
           i.ALU,
           sum(decode(di.item_type, 2, di.qty * -1, di.qty)) as qty_sold,
           sum(round((decode(di.item_type, 2, di.qty * -1, di.qty) * (di.cost)), 2)) as ext_cost,
           sum(round((decode(di.item_type, 2, di.qty * -1, di.qty) * (di.price)), 2)) as ext_price
      from rps.document do
     inner join rps.document_item di
        on do.sid = di.doc_sid
     inner join rps.subsidiary s
        on do.sbs_no = s.sbs_no
       and di.sbs_no = s.sbs_no
     inner join rps.dcs d
        on s.sid = d.sbs_sid
       and di.dcs_code = d.dcs_code
     inner join rps.store st
        on do.store_sid = st.sid
     inner join rps.invn_sbs_item i
        on di.invn_sbs_item_sid = i.sid
       and s.sid = i.sbs_sid
     inner join rps.vendor v
        on i.vend_sid = v.sid
     where do.receipt_type in (0, 1)
       and di.item_type in (1, 2)
       and do.status = 4
       and =-=do.sbs_no=-=
       and =-=st.store_no=-=
       and =-=st.store_code=-=
       and =-=trunc(do.created_datetime)=-=
    group by s.sbs_name,
           St.Store_code,
           d.dcs_code,
           v.vend_code,
           i.description1,
           i.attribute,
           i.item_size,
           i.ALU
) r
where r.ALU between 4000000 and 4009999 -- 外层添加过滤条件

语法说明

BETWEEN a AND b 是SQL标准的范围筛选语法,会包含边界值,等价于 ALU >= 4000000 AND ALU <= 4009999,完全匹配你需要的4000000至4009999的范围要求。

内容的提问来源于stack exchange,提问作者Paul Bieschke Jr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:45:19