Repeat records according to a quantity field

前端 未结 2 833
南方客
南方客 2020-12-17 07:02

I have an Excel sheet which I receive from my customer and I get imported to Access and I would call that table [tblCustomer] and that would look something like this:

<
相关标签:
2条回答
  • 2020-12-17 07:19

    You can do that in a Query quite easily by using a "Numbers table". Create a table named [Numbers] in your database consisting of a single field named [n] that has a field type of Numeric (Long Integer). Create rows in that table with values 1, 2, 3, ... up to a number that well exceeds the largest value you ever expect to see in [tblCustomer].[SumofQty]. In my test I used 2500, so my [Numbers] table looks like

       n
    ----
       1
       2
       3
    ...
    2499
    2500
    

    Then, for sample data in table [tblCustomer]

    ProductID  Name   Expire date  SumofQty
    ---------  -----  -----------  --------
            3  Flour  2013-12-13          6
            6  Meat   2014-01-20         10
    

    the query

    SELECT tblCustomer.*
    FROM
        tblCustomer
        INNER JOIN
        Numbers
            ON Numbers.n <= tblCustomer.SumofQty
    

    returns

    ProductID  Name   Expire date  SumofQty
    ---------  -----  -----------  --------
            3  Flour  2013-12-13          6
            3  Flour  2013-12-13          6
            3  Flour  2013-12-13          6
            3  Flour  2013-12-13          6
            3  Flour  2013-12-13          6
            3  Flour  2013-12-13          6
            6  Meat   2014-01-20         10
            6  Meat   2014-01-20         10
            6  Meat   2014-01-20         10
            6  Meat   2014-01-20         10
            6  Meat   2014-01-20         10
            6  Meat   2014-01-20         10
            6  Meat   2014-01-20         10
            6  Meat   2014-01-20         10
            6  Meat   2014-01-20         10
            6  Meat   2014-01-20         10
    
    0 讨论(0)
  • 2020-12-17 07:28

    Here's the solution using Erik von Asmuth's comment which pointed to an answer originally created by Gustav.

    SELECT t.*
    FROM tblCustomer AS t
    INNER JOIN (SELECT DISTINCT 
                [Hundreds]+[Tens]+[Ones] AS Factor, 
                100*Abs(Hundo.id Mod 10) AS Hundreds,
                10*Abs(Deca.id Mod 10) AS Tens, 
                Abs(Uno.id Mod 10) AS Ones
            FROM 
                msysobjects AS Uno, 
                msysobjects AS Deca,
                msysobjects As Hundo
            WHERE Abs(Deca.id Mod 10) <> 0 
                    or Abs(Uno.id Mod 10) <> 0
                    or Abs(Hundo.id Mod 10) <> 0) AS sq on sq.Factor <= t.SumofQty
    

    I added the hundreds column as well because I think I'm probably going to need it. My method also filters out 0 in the sub query, otherwise I was getting 2 rows for things with a quantity of 1.

    0 讨论(0)
提交回复
热议问题