WITH base AS (
    SELECT 
        a.prd_no,
        c.CAP1,
        c.WV,
        c.FL,
        c.TOL,
        CAST(a.qty AS DECIMAL(18,4)) AS qty,
        CAST(b.pk2_qty AS DECIMAL(18,4)) AS pk2_qty,
        CEILING(
            CAST(a.qty AS DECIMAL(18,4)) / NULLIF(CAST(b.pk2_qty AS DECIMAL(18,4)), 0)
        ) AS row_cnt
    FROM tf_pss a
    INNER JOIN prdt b ON a.prd_no = b.prd_no
    INNER JOIN prdt_z c ON b.prd_no = c.PRD_No
    WHERE a.ps_no =:PS_NO
),
nums AS (
    SELECT TOP (100000)
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
    FROM sys.all_objects a
    CROSS JOIN sys.all_objects b
)
SELECT 
    base.prd_no,
    base.CAP1,
    base.WV,
    base.FL,
    base.TOL,
    base.pk2_qty,
    nums.rn AS 行号,
    CASE 
        WHEN nums.rn < base.row_cnt THEN base.pk2_qty
        ELSE base.qty - base.pk2_qty * (nums.rn - 1)
    END AS byqty
FROM base
INNER JOIN nums ON nums.rn <= base.row_cnt
ORDER BY base.prd_no, nums.rn;
最后修改:2026 年 06 月 10 日
如果觉得我的文章对你有用,请随意赞赏