T-SQL向每个客户分配10,000张发票

时间:2018-10-04 09:04:45

标签: sql sql-server tsql

我正在尝试准备一些测试数据并努力工作。

我有以下发票表,其中每个companyId都有500,000张发票(假设有10家公司划分了5,000,000行)

CREATE TABLE Invoice (
    InvoiceId INT IDENTITY(1,1) NOT NULL,
    CompanyId INT NOT NULL,
    Amount INT NOT NULL,
)

以下是我的客户表,每个公司有10,000个客户。

  CREATE TABLE CompanyCustomer(
        CustomerId INT IDENTITY(1,1) NOT NULL,
        CompanyId INT NOT NULL,     
    )

最后,我们有客户发票表。 我想为每家公司的50个客户分配10,000张发票。这就是我在努力的地方 。由于每个公司都有500,000张发票,因此我们可以将其划分为50个客户,每个用户将获得10,000张发票。

CREATE TABLE dbo.CustomerInvoice(
    CustomerId INT IDENTITY(1,1) NOT NULL,
    CompanyId INT NOT NULL,
    InvoiceId INT NOT NULL,
)

1 个答案:

答案 0 :(得分:3)

您可以为客户和发票分配行号,并使用一些简单的数学运算将它们匹配:

INSERT INTO CustomerInvoice (CustomerId,CompanyId,InvoiceId)
SELECT cc.CustomerId,cc.CompanyID,i.InvoiceID
FROM
(select *,ROW_NUMBER() OVER (PARTITION BY CompanyId ORDER BY InvoiceId) as rn
from Invoice) i
inner join
(select *,ROW_NUMBER() OVER (PARITION BY CompanyId ORDER By CustomerId) as rn
from CompanyCustomer) cc
on
 cc.CompanyId = i.CompanyID and
 cc.rn = ((i.rn - 1) / 10000) + 1