
SELECT 
    t1.pono AS 采购合同号,
    t2.sono AS 销售合同号,
    t1.foursname AS 我方,
    t2.ctname AS 客户,
    t1.stockname AS 仓库名称,
    t1.sdesc AS 中文品名,
    t1.arrDt AS 到港时间,
    pp.dPort AS 目的港,
    pp.chnShipName AS 船名,
    t1.ut AS 单位,
    t1.total_qty AS 库存量,
    ABS(nvl(t2.total_qty_out, 0)) AS 出库量,
    ABS(nvl(t3.total_qty_in, 0)) AS 入库量,
    t1.poamt AS 采购金额,
    t1.soamt AS 销售金额,
  
    pp.create_by_name AS 制单人代码
FROM (
    SELECT 
        IFNULL(b.pono, '') AS pono,
        a.foursname,
        b.ctname,
        b.stockname, 
        b.sdesc,
        b.ut, 
        b.fcat, 
        b.qty, 
        b.poamt,
        b.soamt,
        b.sono, 
        b.id,
        b.create_by,
        a.arrDt,
        -- 计算该合同的总数量
        SUM(nvl(b.fcat, 0) * nvl(b.qty, 0)) OVER (PARTITION BY IFNULL(b.pono, '')) AS total_qty,
        -- 为每个合同的行编号，取第一条
        ROW_NUMBER() OVER (PARTITION BY IFNULL(b.pono, '') ORDER BY b.id) AS rn
    FROM mdkcdtl b
    LEFT JOIN mdkcctrl a ON a.id = b.rid
    WHERE a.placed = '2' 
        AND IFNULL(a.del_flag, 0) <> 1
        AND IFNULL(b.del_flag, 0) <> 1
        AND a.fmodalid NOT IN ('922', '923')
) t1
LEFT JOIN (
    SELECT 
        b.ctname as ctname,
        b.sono as sono,
        IFNULL(b.pono, '') AS pono,
        -- 计算fcat=-1的总数量
        SUM(nvl(b.fcat, 0) * nvl(b.qty, 0)) AS total_qty_out,
        -- 统计fcat=-1的记录数
        COUNT(*) AS count_minus1
    FROM mdkcdtl b
    LEFT JOIN mdkcctrl a ON a.id = b.rid
    WHERE a.placed = '2' 
        AND b.fcat = '-1'
        AND IFNULL(a.del_flag, 0) <> 1
        AND IFNULL(b.del_flag, 0) <> 1
        AND a.fmodalid NOT IN ('922', '923')
    GROUP BY IFNULL(b.pono, ''),b.ctname,b.sono
) t2 ON t1.pono = t2.pono
LEFT JOIN (
    SELECT 
        IFNULL(b.pono, '') AS pono,
        -- 计算fcat=-1的总数量
        SUM(nvl(b.fcat, 0) * nvl(b.qty, 0)) AS total_qty_in,
        -- 统计fcat=-1的记录数
        COUNT(*) AS count_minus1
    FROM mdkcdtl b
    LEFT JOIN mdkcctrl a ON a.id = b.rid
    WHERE a.placed = '2' 
        AND b.fcat = '1'
        AND IFNULL(a.del_flag, 0) <> 1
        AND IFNULL(b.del_flag, 0) <> 1
        AND a.fmodalid NOT IN ('922', '923')
    GROUP BY IFNULL(b.pono, '')
) t3 ON t1.pono = t3.pono
LEFT JOIN (
    SELECT 
        a1.pono,
        a1.dPort,
        a1.chnShipName,
        a1.totalQty,
        a1.create_by_name
     --  a2.sdesc
    FROM purchaseOrder a1 
  --  LEFT JOIN pOrderDtl a2 ON a1.id = a2.rid
    WHERE IFNULL(a1.del_flag, 0) <> 1   
    --   AND IFNULL(a2.del_flag, 0) <> 1
    AND a1.placed = '2'
) pp
 ON t1.pono = pp.pono
WHERE t1.rn = 1  -- 只取每个合同的第一行
    AND t1.stockname <> '直运库'
ORDER BY t1.pono;
