SQL Server - 将行拆分为多行

时间:2018-06-01 07:34:51

标签: sql-server-2008

我有一个表示订单行的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。

1 个答案:

答案 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)