我正在尝试准备一些测试数据并努力工作。
我有以下发票表,其中每个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,
)
答案 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