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 很重要,它执行的次数超过了要求的次数,然后可能会影响性能。
我不确定我的问题是否正确,但我想根据以下输入生成输出
然后根据纸箱数量拆分数据。下面是输出。
是否可以使用 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 很重要,它执行的次数超过了要求的次数,然后可能会影响性能。