Как получить данные из собственной таблицы ссылок в sql

Я использую sql 2012, и у меня есть таблица саморегуляции, которая имеет 3 уровня. Структура таблицы выглядит следующим образом:

Структура таблицы

У меня есть другая таблица, ссылающаяся на эту таблицу, у нее есть идентификатор в качестве внешнего ключа, поэтому, если внешний ключ для этой таблицы равен 6, мне нужно показать, что 6 является «AAA», и это дочерний узел «AA», который является дочерним узлом «A». Мне нужно перейти на более низкий уровень, а с нижнего уровня я должен подняться на верхний уровень. В настоящее время я могу подняться на второй уровень.

Ниже приведена структура таблицы, которая ссылается на другую таблицу.

Поэтому я хотел бы сообщить об этой таблице, и окончательный вывод должен выглядеть следующим образом:

Если мой вопрос не слишком ясен, спросите, я попробую и уточню его.

Предполагая, что глубина дерева категорий не превышает 3 уровней, это должно работать:

 declare @Catergory table ( ID int not null, Name nvarchar(10) not null, ParentID int null ) declare @Customer table ( ID int not null, Name nvarchar(10) not null, SurName nvarchar(10) not null, Address nvarchar(30) not null, CategoryId int not null ) insert into @Catergory (ID, Name, ParentID) values (1, 'A', null), (2, 'B', null), (3, 'C', null), (4, 'AA', 1), (5, 'CC', 3), (6, 'AAA', 4), (7, 'BB', 2), (8, 'AAA', 4), (9, 'CCC', 5), (10, 'AA', 1) insert into @Customer (ID, Name, SurName, Address, CategoryId) values (1, 'Duck', 'Duffy', '10 Steet', 10), (2, 'Ben', 'Ten', '10 Steet', 6), (3, 'Cat', 'Dog', '10 Steet', 5), (4, 'Chicken', 'Wings', '10 Steet', 1), (5, 'Fish', 'Water', '10 Steet', 7) -- build structure using assumption that the depth is max three levels select * from @Customer cust join ( select ID, Name as CategoryName, null As CategoryType, null as SubCategory from @Catergory roots where ParentID is null union select mids.ID, roots.Name, mids.Name, null from @Catergory mids join @Catergory roots on mids.ParentID = roots.ID and roots.ParentID is null union select leafs.ID, roots.Name, mids.Name, leafs.Name from @Catergory leafs join @Catergory mids on leafs.ParentID = mids.ID join @Catergory roots on mids.ParentID = roots.ID and roots.ParentID is null ) as struct on cust.CategoryId = struct.ID order by cust.id 

Вывод:

 +----+---------+---------+----------+------------+----+--------------+--------------+-------------+ | ID | Name | SurName | Address | CategoryId | ID | CategoryName | CategoryType | SubCategory | +----+---------+---------+----------+------------+----+--------------+--------------+-------------+ | 1 | Duck | Duffy | 10 Steet | 10 | 10 | A | AA | NULL | | 2 | Ben | Ten | 10 Steet | 6 | 6 | A | AA | AAA | | 3 | Cat | Dog | 10 Steet | 5 | 5 | C | CC | NULL | | 4 | Chicken | Wings | 10 Steet | 1 | 1 | A | NULL | NULL | | 5 | Fish | Water | 10 Steet | 7 | 7 | B | BB | NULL | +----+---------+---------+----------+------------+----+--------------+--------------+-------------+ 

Некоторые дополнительные столбцы все еще там, но я уверен, что вы можете избавиться от них. Обратите внимание, что некоторые столбцы карт имеют null значения. Это связано с тем, что, если клиент находится в верхней или средней категории, нет разумного способа заполнить эти столбцы.

  • Как добавить параметры для нескольких агентов для исключения из отчета статистики SSRS
  • SQL Выберите только месяц из формата YYYYMMDD int
  • Результат SSRS отличается от результата SSMS тем же запросом
  • Как я могу отобразить зеленую ячейку, если результат верен или изображение зеленого робота, когда результат верен в службах отчетов SQL Server
  • Как указать, что значение НЕ МЕНЕЕ в параметре
  • Перемещение только подписки с SSRS 2008 на SSRS 2012
  • Преобразовать MonthName в месяц Номер SSRS
  • Нарушение отчета SSRS в зависимости от параметра Multi Value
  • SSRS - повторное использование временной таблицы в нескольких наборах данных
  • Как создать гистограмму на SSRS
  • Запрос SQL для исключения определенных дат для ssrs
  • Interesting Posts

    Как вы достигаете пределов 8060 байт на строку и 8000 на (varchar, nvarchar) значение?

    MVC 3 Entity Framework – новый столбец базы данных, не заполняющий соответствующее свойство

    Azure Search DataSource с локальным SQL Server и лучшими практиками?

    Невозможно преобразовать между строковыми типами данных unicode и non-unicode в SSIS

    Аномалия производительности DataAdapter.Fill

    Использование параметров в службах MS Reporting Services (SQL Server 2008) для источника данных ODBC

    Ошибка подключения к серверу MS SQL

    Ошибки SQL-сервера при преобразовании null в datetime

    TSQL, инструкция SELECT в CASE в COUNT

    Как я могу удалить устройство резервного копирования SqlServer с помощью SMO в C #?

    SQL, чтобы найти несоответствия между двумя источниками данных

    Обработка ошибок SQLServerBulkCopy

    Проблема с динамическими запросами LINQ, содержащими скобки

    Mysql, чтобы получить текущую дату со временем 23:59:59

    В SQL-сервере устанавливается ли для всех значений столбца Text значение NULL для уменьшения размера базы данных?

    Давайте будем гением компьютера.