SQL 基于服务器拆分行的减法值

SQL Server Split Row based Subtraction value

我不确定我的问题是否正确,但我想根据以下输入生成输出

然后根据纸箱数量拆分数据。下面是输出。

是否可以使用 SQL 实现此目的?就像根据

对数量进行反透视

纸箱数量。

或者这样输出。

我建议您可以在 SQL

中使用 GROUP BY 命令

请尝试:

;with T as(
    select *, 1 as RNum, Quantity/Karton Split 
    from tbl

    union all

    select 
        T.Num, T.Quantity-T.Karton, T.Karton, T.RNum+1, T.Split 
    from 
        T join tbl T1 on T.Num=T1.Num 
    where 
        T.Split>=1 and T.Quantity-T.Karton>0
)
select Num, Quantity, Karton from T  order by Num, Quantity Desc

Fiddle 演示 here

创建号码table

INSERT INTO tblNumber
SELECT TOP 100000 ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS [N]
FROM dbo.syscolumns tb1,dbo.syscolumns tb2

然后,

CREATE TABLE #RealTable ( 
    NOs VARCHAR(5),
    Quantity int,
    Karton int)

  INSERT INTO #RealTable VALUES 
    ('A', 5000, 1000),
    ('B', 15000, 5000),
    ('C', 25000, 5000)


;with CTE1 as
(
select c.*,cd.number as Seq
from tblnumber cd, #RealTable c
where cd.number<=(Quantity/Karton)
)

select NOs,Quantity-(karton*(seq-1)) as Quantity
,Karton,Seq from CTE1 c

drop table #RealTable

根据您的示例数据CROSS JOIN只执行需要的行数,因此不会影响性能。

因此,了解您的真实 table 和真实样本 data.If 很重要,它执行的次数超过了要求的次数,然后可能会影响性能。