Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL sửa đổi dữ liệu bảng thành một biểu mẫu nhỏ gọn hơn

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

Kết quả:

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. Điều gì xảy ra với Id khóa chính khi nó vượt quá giới hạn?

  2. Phạm vi ngày nằm giữa hai ngày trong truy vấn LINQ

  3. Liên kết các cột theo chiều dọc trong SQL

  4. 4 cách để nhận lịch sử công việc máy chủ SQL

  5. Cách đổi tên bảng trong SQL Server