[英]SQL Split One Row To Multiple Rows Based on Column Number
我有一个订单表,我会保持简单。 我需要根据订单中的数量拆分行。 例如,如果订单数量为 4,我需要将原始行拆分为 4 行,每行数量为 1。 下面的示例数据。
ID FKID Product QTY
1 100 Widget 4
我需要这样的结果。
ID FKID Product QTY
1 100 Widget 1
2 100 Widget 1
3 100 Widget 1
4 100 Widget 1
使用临时计数表和简单 JOIN 的另一种选择
例子
Select ID = row_number() over (partition by A.ID order by N)
,FKID
,Product
,Qty = 1
From YourTable A
Join (
Select Top (1000) N=Row_Number() Over (Order By (Select NULL))
From master..spt_values n1 ,master..spt_values n2
) B on N<=A.[QTY]
退货
ID FKID Product Qty
1 100 Widget 1
2 100 Widget 1
3 100 Widget 1
4 100 Widget 1
一种简单的方法是递归 CTE:
with cte as (
select ID, FKID, Product, QTY
from t
union all
select ID, FKID, Product, QTY - 1
from t
where qty > 1
)
select id, fkid, product, 1 as qty
from cte;
唯一需要注意的是,如果qty
可以为 100 或更大,则需要option (maxrecursion 0)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.