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

如何使用Oracle SQL将两张数据表合并为指定结构?

Oracle SQL实现数据表合并方案

针对你的需求,我们可以通过两种实用方式实现表合并,以下是具体方案:

方法一:条件聚合(适配同规格下多变体场景)

假设第一张表名为ITEM_SPEC,第二张表名为ITEM_STOCK,通过分组+条件聚合可将同规格下不同ITEM的库存拆分到对应列:

SELECT
    -- 提取ITEM前缀(去除末尾Z)作为最终展示的ITEM
    CASE 
        WHEN s.ITEM LIKE '%Z' THEN SUBSTR(s.ITEM, 1, LENGTH(s.ITEM)-1)
        ELSE s.ITEM
    END AS ITEM,
    s.SPEC,
    -- 不带Z的ITEM库存映射为STOCK1
    MAX(CASE WHEN s.ITEM NOT LIKE '%Z' THEN st.STOCK END) AS STOCK1,
    -- 带Z的ITEM库存映射为STOCK2
    MAX(CASE WHEN s.ITEM LIKE '%Z' THEN st.STOCK END) AS STOCK2
FROM ITEM_SPEC s
INNER JOIN ITEM_STOCK st 
    ON s.ITEM = st.ITEM
-- 按最终ITEM和规格分组,聚合对应库存值
GROUP BY 
    CASE 
        WHEN s.ITEM LIKE '%Z' THEN SUBSTR(s.ITEM, 1, LENGTH(s.ITEM)-1)
        ELSE s.ITEM
    END,
    s.SPEC;

方法二:自连接(适配固定主ITEM+Z后缀ITEM的场景)

如果数据规则固定为主ITEM(如A、B)对应带Z后缀的ITEM(如AZ、BZ),可通过表自连接精准匹配:

SELECT
    main.ITEM,
    main.SPEC,
    main_stock.STOCK AS STOCK1,
    z_stock.STOCK AS STOCK2
FROM ITEM_SPEC main
-- 关联主ITEM的库存数据
INNER JOIN ITEM_STOCK main_stock 
    ON main.ITEM = main_stock.ITEM
-- 关联同规格下带Z后缀的ITEM记录
INNER JOIN ITEM_SPEC z_item 
    ON main.SPEC = z_item.SPEC 
    AND z_item.ITEM = main.ITEM || 'Z'
-- 关联带Z后缀ITEM的库存数据
INNER JOIN ITEM_STOCK z_stock 
    ON z_item.ITEM = z_stock.ITEM
-- 仅保留不带Z的主ITEM记录
WHERE main.ITEM NOT LIKE '%Z';

执行结果验证

两种方法执行后均可得到目标结构的数据:

ITEMSPECSTOCK1STOCK2
AA1-113
BB1-124

内容的提问来源于stack exchange,提问作者Tri Ha Minh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:16:23