Как получить данные из собственной таблицы ссылок в sql
Я использую sql 2012, и у меня есть таблица саморегуляции, которая имеет 3 уровня. Структура таблицы выглядит следующим образом:
Структура таблицы
- Записи SSRS не отображаются, когда используется (выберите все), но при выборе особого значения
- Отладка отчета не работает, показывая сообщение об ошибке «Убедитесь, что предоставлены достаточные разрешения» Как решить эту проблему?
- Epicor 10 (ERP) Ошибка отчетности SSRS: максимум 1024 столбца возвращены
- Подводный отчет не может быть показан. Под-отчет работает отдельно - не с основным докладом
- SSRS Subreport выполняется несколько раз, я хочу, чтобы он выполнялся один раз
У меня есть другая таблица, ссылающаяся на эту таблицу, у нее есть идентификатор в качестве внешнего ключа, поэтому, если внешний ключ для этой таблицы равен 6, мне нужно показать, что 6 является «AAA», и это дочерний узел «AA», который является дочерним узлом «A». Мне нужно перейти на более низкий уровень, а с нижнего уровня я должен подняться на верхний уровень. В настоящее время я могу подняться на второй уровень.
Ниже приведена структура таблицы, которая ссылается на другую таблицу.
Поэтому я хотел бы сообщить об этой таблице, и окончательный вывод должен выглядеть следующим образом:
Если мой вопрос не слишком ясен, спросите, я попробую и уточню его.
- Отображение HTML-контента в отчете SSRS
- Задайте значение параметра SSRS Report Parameter с переданным значением Querystring в SSRS
- Как перемещать столбцы деталей между родительскими группами в SSRS
- Как установить описание папки во время развертывания с помощью Visual Studio?
- Форматирование цвета SSRS на основе параметра
- SQL - объединение последовательных строк даты на основе столбца
- SSRS объединяет и объединяет два отчета в один отчет
- Как показать промежуточное и общее количество групп в ssrs
Предполагая, что глубина дерева категорий не превышает 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
значения. Это связано с тем, что, если клиент находится в верхней или средней категории, нет разумного способа заполнить эти столбцы.