业务场景:
把物料按箱分装,一行转多行
WITH Temp AS (
SELECT
1 AS XuHao,--初始序号为1
T1.Id
FROM U_SDP1 T1 WHERE T1.DocEntry = @DocEntry
UNION ALL
SELECT
Tm.XuHao+1 AS XuHao,--序号递增
T1.Id
FROM Temp Tm INNER JOIN U_SDP1 T1 On Tm.Id = T1.Id WHERE (Tm.XuHao+1)*T1.XQuantity <= T1.Quantity
)
SELECT
N'钧茂电子有限公司' AS N'代理商名称',
T2.WhsName,
T1.ItemCode AS N'物料编号',
T1.FrgnName AS N'制造商料号',
T1.CardItem AS N'客户料号',
T1.NumAtCard AS N'订单号',
T1.YPFrgnName AS N'规格描述',
T0.DocDueDate AS N'交货日期',
T3.Name AS N'品牌',
CASE WHEN Tm.XuHao <= T1.Quantity*/T1.XQuantity THEN
--满箱数量
CAST(T1.XQuantity AS VARCHAR(20)) +'PCS'
ELSE
--最后一箱装不满时的数量
CAST(T1.Quantity%T1.XQuantity AS VARCHAR(20)) +'PCS'
END AS N'本箱数量',
CAST(T1.Quantity AS VARCHAR(20)) + 'PCS' AS N'交货数量',
--总箱数 = 总数量除以每箱数量再向上取整数
CAST(Tm.XuHao AS VARCHAR(20)) +'-'+ CAST(CEILING(T1.Quantity*1.0/T1.XQuantity) AS VARCHAR(20)) AS N'箱序',
'PCS' AS N'单位',
T0.CardName AS N'客户名称'
FROM U_OSDP T0
INNER JOIN U_SDP1 T1 ON T0.DOcEn

本文通过实例演示了如何在SQLServer中使用`WITH AS`进行递归查询,以及如何将一行数据转换为多行,适用于处理如物料分装等业务场景。

2109

被折叠的 条评论
为什么被折叠?



