我有一个表示订单行的SQL Server 2008 R2表。 它看起来像这样(简化版):
LineId ProductId Quantity MaxQuantityInPackage
1 ProductA 160 160
2 ProductB 20 50
3 ProductC 220 100
这是我需要的结果:
LineId ProductId Quantity MaxQuantityInPackage
1 ProductA 160 160
2 ProductB 20 50
3 ProductC 220 100
3 ProductC 220 100
3 ProductC 220 100
如您所见,我需要为每个产品系列提供一行一行。 ProductC需要3个包,因此必须分成3行。
我根据临时表或T-SQL脚本找到了一些提示。
但在我的情况下,我在软件中使用此查询来创建报告(账单)。 这个软件不允许我使用复杂的功能,我很幸运能够访问UNION功能。
我如何以最简单的方式实现这一目标?
感谢您的回复。 JiceY。
答案 0 :(得分:0)
最简单的方法是创建一个数字表,其中整数从1到您需要的最大数字。
然后你可以使用
SELECT oi.*
FROM OrderItems oi
JOIN Numbers n
ON n.Number <= CEILING(1.0 * Quantity / MaxQuantityInPackage)
如果您无法创建表格,则可以包含派生的内联表格。
SELECT oi.*
FROM OrderItems oi
JOIN (SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
UNION ALL
SELECT 4
UNION ALL
SELECT 5
UNION ALL
SELECT 6
UNION ALL
SELECT 7
UNION ALL
SELECT 8
UNION ALL
SELECT 9
UNION ALL
SELECT 10) n(Number)
ON n.Number <= CEILING(1.0 * Quantity / MaxQuantityInPackage)