Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL zmienia dane tabeli w bardziej zwartą formę

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

Wynik:

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. Jak zdobyć miesiąc temu od dzisiaj w SQL Server 2008?

  2. Klauzula GDZIE znaleźć wszystkie rekordy w określonym miesiącu

  3. warunkowe ograniczenie unikatowe

  4. Skutecznie rozwiąż problem z bazą danych SQL Server utknął w trybie podejrzanym

  5. Data i godzina programu SQL Server PODOBNY wybór?