Получите торгового представителя и где они принадлежат - PullRequest
2 голосов
/ 11 ноября 2011
    TerritoryId, Description, ParentTerritoryId, Type 
--------------------------------------------------------
    1, UnitedStates, null, Territory 
    1, John Smith, 1, Sales Rep 
    2, Georgia, 1, Territory
    2, Jane Doe, 2, Sales Rep 
    2, Ann Smith, 2, Sales Rep

Как мне написать следующий T-SQL? Допустим, я ищу имя типа "Энн Смит".

Я бы хотел, чтобы результат выглядел следующим образом:

1, United States, null, Territory
2, Georgia, 1, Territory
2, Ann Smith, 2, Sales Rep

По сути, я хочу найти торгового представителя или торговых представителей и какую организацию они принадлежат на протяжении всей цепочки.

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Предполагая SQL Server 2005+, чтобы мы могли использовать рекурсивный CTE , и предполагая, что значения TerritoryId действительно должны быть уникальными:

TerritoryId  Description   ParentTerritoryId  Type 
--------------------------------------------------------
1            UnitedStates  NULL               Territory 
2            John Smith    1                  Sales Rep 
3            Georgia       1                  Territory
4            Jane Doe      3                  Sales Rep 
5            Ann Smith     3                  Sales Rep

Тогда вы можете сделать это:

WITH cteRecursion AS (
    SELECT TerritoryId, Description, ParentTerritoryId, Type, 1 AS Level
        FROM YourTable 
        WHERE Description = 'Ann Smith'
    UNION ALL
    SELECT t.TerritoryId, t.Description, t.ParentTerritoryId, t.Type, c.Level + 1
        FROM YourTable t
            INNER JOIN cteRecursion c
                ON t.TerritoryId = c.ParentTerritoryId
)
SELECT TerritoryId, Description, ParentTerritoryId, Type 
    FROM cteRecursion 
    ORDER BY Level DESC;
0 голосов
/ 11 ноября 2011

Хотя в таблице возможно иметь многоуровневую структуру, в идеале вы захотите разделить ее.

один стол для территории и один для торговых представителей.

Если ваши торговые представители могут иметь более одной территории, вам нужно перейти к 3 столам один для торговых представителей, один для территории и справочная таблица.

если вы собираетесь создавать многоуровневую таблицу, каждая запись должна иметь уникальный идентификатор

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