5

我需要一些有关 SQL 查询的帮助。我知道这应该重新设计,但这是我在更大的系统上做的一个小修复:(。

系统有一个名为 sales 的表,其中包含已售出的零件。

id  | date   | idpart
1   |unixtime|   227
2   |unixtime|   256 

等等..

在包含订单内容的 Orderdetails 表中,零件按 id 列出,并带有客户订购的唯一零件的数量。

id |idpart | amount
1  | 255   | 4
2  | 265   | 2

现在,我的问题是我必须运行一个查询来填充销售表,但是将 idpart 添加为新行,该部分与按顺序的数量值相同的次数。我需要的结果是:

id  | date   | idpart
1   |unixtime|   227
2   |unixtime|   256 

3   |unixtime|   255
4   |unixtime|   255
5   |unixtime|   255
6   |unixtime|   255
7   |unixtime|   265
8   |unixtime|   265

有没有人可以在这个问题上给我一些帮助?

4

1 回答 1

3

如果您有一个带有数字的表格,这很容易。你可以这样做:

select id, date, idpart
from sales
union all
select id, date, idpart
from orders o cross
     numbers n
     on n.number <= o.amount

这是假设date来自订单表。

现在,您只需要生成数字表。这是 MySQL 的一个痛点。也许您有另一个可以使用的表,例如日历表。否则,您可以通过插入具有自动增量列的表来创建一个。

在其他数据库中,您可以使用该row_number()函数动态创建这样的表。但是 MySQL 不支持这个。

于 2012-12-19T15:10:27.857 回答