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

SQL ревизиране на таблични данни в по-компактна форма

declare @t table(Id1 int, Id2 int)
insert @t values (100, 50)
insert @t values (    120,    70)
insert @t values (    70,     50)
insert @t values (    34,     20)
insert @t values (    50,     40)
insert @t values (    40,     10)

;with a as
(
-- find all rows without parent <*>
select id2, id1 from @t t where not exists (select 1 from @t where t.id1 = id2)
union all -- recusive work down to lowest child while storing the parent id1 
select t.id2 , a.id1
from a
join @t t on a.id2 = t.id1
)
-- show the lowest child for each row found in <*>
select id1, min(id2) id2 from a
group by id1

Резултат:

id1         id2
----------- -----------
34          20
100         10
120         10



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TABLESAMPLE връща грешен брой редове?

  2. Свързване на RStudio към SQL Server

  3. Оператор insert exec не може да бъде вложен

  4. Инсталирайте разширението на агент на SQL Server в Azure Data Studio

  5. Шифроване на таблици на база данни в SQL Server 2008