T-SQL выделяет 10 000 счетов каждому клиенту - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь подготовить некоторые тестовые данные и стараюсь изо всех сил.

У меня есть следующая таблица счетов-фактур с 500 000 счетов-фактур для каждого companyId (Предположим, есть 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,     
    )

Наконец, у нас есть таблица счетов клиентов. Я хочу выделить 10000 счетов 50 клиентам из каждой компании.Вот где я борюсь .Поскольку каждая компания имеет 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 голосов
/ 04 октября 2018

Вы можете назначить номера строк клиентам и счетам и использовать несколько простых математических методов, чтобы сопоставить их:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...