Выберите родительско-дочерние данные до предела без сирот - PullRequest
0 голосов
/ 06 марта 2012

У меня есть родительская таблица (Person) с дочерней таблицей (Address).Мне нужно отправить все комбинации лиц и адресов в обрабатываемую службу, но я ограничен тем, что могу отправлять только до 10 000 одновременно.Когда я отправляю данные для человека, мне нужно убедиться, что я отправляю все данные для этого человека, чтобы их нельзя было распределить по партиям.

Я хочу получать данные только с помощью SQL, без дополнительного кода (он должен использоваться в пакете служб SSIS).

Пример: я хочу получить максимум 5 из данных ниже

---Person---  ---------Address----------
ID  Name      AddressID    Address
--- --------  ------------ -------------
1   Bill      1            1 The Street
1   Bill      2            3 The Road
2   Jeff      3            7 The Hill
3   Mike      4            9 The Avenue
4   Ross      5            11 Main Road     --- This is the 5th row, must be ignored
4   Ross      6            12 Down Under    --- This record would be orphaned if 
                                                we pulled top 5

1 Ответ

0 голосов
/ 08 марта 2012

Мне показалось, что это лучший способ сделать это:

WITH data AS
(
      select TOP 10001 ROW_NUMBER() OVER (ORDER BY p.PersonID) as [Rank], 
             p.PersonID, a.AddressID
      from Input.Person p
      JOIN Input.Address a on p.PersonID = a.PersonID
)

select d1.*
FROM data d1
LEFT JOIN data d2 on d1.PersonID = d2.PersonID
      AND d2.[RANK] > 10000 
WHERE d1.[RANK] <= 10000
AND d2.PersonID IS NULL
ORDER BY 1

TOP 10001 позволяет мне ограничить поиск данных так, как если бы 10000-я и 10001-я записи разделяли родителя, а затем10000 следует игнорировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...