Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Рекурсивно вземете всички данни въз основа на родителски идентификатор

Това може да се направи в SQL Server 2005 и по-нови с помощта на Common Table Expressions (CTE). Ето страхотна връзка от MSDN, описваща рекурсивни заявки:Рекурсивни заявки, използващи общи таблични изрази

Ето един пример:

Ако си представите йерархична линия от хора, тази заявка ще ви позволи да видите пълната линия на всеки човек И ще изчисли мястото му в йерархията. Може да се модифицира, за да се намери всяко дъщерно отношение.

Вместо ИД на лицето, вие сменяте ИД на реда, който използвате като свой родител.

--Create table of dummy data
create table #person (
personID integer IDENTITY(1,1) NOT NULL,
name      varchar(255) not null,
dob       date,
father    integer
);

INSERT INTO #person(name,dob,father)Values('Pops','1900/1/1',NULL);  
INSERT INTO #person(name,dob,father)Values('Grandma','1903/2/4',null);
INSERT INTO #person(name,dob,father)Values('Dad','1925/4/2',1);
INSERT INTO #person(name,dob,father)Values('Uncle Kev','1927/3/3',1);
INSERT INTO #person(name,dob,father)Values('Cuz Dave','1953/7/8',4);
INSERT INTO #person(name,dob,father)Values('Billy','1954/8/1',3);

DECLARE @OldestPerson INT; 
SET @OldestPerson = 1; -- Set this value to the ID of the oldest person in the family

WITH PersonHierarchy (personID,Name,dob,father, HierarchyLevel) AS
(
   SELECT
      personID
      ,Name
      ,dob
      ,father,
      1 as HierarchyLevel
   FROM #person
   WHERE personID = @OldestPerson

   UNION ALL

   SELECT
    e.personID,
      e.Name,
      e.dob,
      e.father,
      eh.HierarchyLevel + 1 AS HierarchyLevel
   FROM #person e
      INNER JOIN PersonHierarchy eh ON
         e.father = eh.personID
)

SELECT *
FROM PersonHierarchy
ORDER BY HierarchyLevel, father;

DROP TABLE #person;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sql Server SSIS пакет Плосък файл Образец на име на файл за местоназначение (дата, час или подобен)?

  2. SQL-Server:Неправилен синтаксис близо до ключовата дума „с“. Ако това изявление е израз на обща таблица

  3. Оптимизация на SQL заявки

  4. Присъствие IN и OUT

  5. Вмъкнете с помощта на последователност като генератор за стойност на първичен ключ в Entity Framework