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

为单列设置不同筛选条件的SQL查询需求

问题需求

现有基于IM_WH与CI_Item两张表的SELECT查询,原本筛选WarehouseCode='002'的所有数据,但需要将**QuantityOnPurchaseOrder(对应IM_WH.PO字段)**替换为WarehouseCode='009'对应的值,其余字段仍保留002仓库的筛选结果。此前尝试使用CASE语句未成功,因为需要直接输出实际字段值。

数据示例:

ItemCodeOnHandQTYPOWarehouseCode
WPF01-CC102-FROST100002
WPF01-CC102-FROST01000009
WPF01-CC102-GREEN90002

期望输出:

ItemCodeOnHandQTYPOWarehouseCode
WPF01-CC102-FROST101000002
WPF01-CC102-GREEN90002

原查询语句:

SELECT        TOP (100) PERCENT dbo.IM_WH.IC, dbo.IM_WH.OnHand, dbo.IM_WH.SO, dbo.IM_WH.PO, 
                 dbo.IM_WH.RP, dbo.IM_WH.MIN, dbo.IM_WH.PHYD
FROM            dbo.IM_WH INNER JOIN
                 dbo.CI_Item ON dbo.IM_WH.IC = dbo.CI_Item.IC
WHERE        (dbo.IM_WH.WarehouseCode = '002') AND (dbo.IM_WH.RP = 'R') AND (dbo.IM_WH.IC LIKE 'WPF%')
ORDER BY dbo.IM_WH.IC
解决方案

可以通过自连接IM_WH表实现需求:主查询保留002仓库的所有筛选条件,同时左连接到009仓库的同表数据,通过COALESCE函数优先取009仓库的PO值,若商品在009仓库无记录,则使用002仓库的原PO值。

修改后的SQL语句如下:

SELECT TOP (100) PERCENT 
    wh002.IC, 
    wh002.OnHand, 
    wh002.SO, 
    COALESCE(wh009.PO, wh002.PO) AS PO,  -- 优先取009仓库的PO值,无则用002的
    wh002.RP, 
    wh002.MIN, 
    wh002.PHYD
FROM dbo.IM_WH wh002
INNER JOIN dbo.CI_Item ON wh002.IC = dbo.CI_Item.IC
LEFT JOIN dbo.IM_WH wh009 
    ON wh002.IC = wh009.IC 
    AND wh009.WarehouseCode = '009'  -- 关联009仓库的同商品记录
WHERE 
    wh002.WarehouseCode = '002' 
    AND wh002.RP = 'R' 
    AND wh002.IC LIKE 'WPF%'
ORDER BY wh002.IC

逻辑说明

  • 用别名wh002指代002仓库的主数据,保留原查询的所有筛选条件;
  • 用LEFT JOIN关联别名wh009的009仓库数据,确保即使商品在009仓库无记录,主查询结果也不会被过滤;
  • COALESCE(wh009.PO, wh002.PO)会先取wh009.PO的值,若该值为NULL(即009仓库无对应商品),则回退到wh002.PO的原数值,完全匹配需求。

内容的提问来源于stack exchange,提问作者jarett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:52:09