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

SQL:Znajdź brakujące ścieżki folderów w hierarchiach podziału

Używając tej dodanej ścieżki (11,2,'U\V\Z\L\O\Q\R\S\T') aby pokazać wiele brakujących folderów w ścieżce:

with cte as (
select BaseDirID, DisplayPath = left(DisplayPath,len(DisplayPath)-charindex('\',reverse(DisplayPath)))
from t
where DirLevel > 1
  and not exists (
  select 1 
  from t i
  where t.BaseDirId = i.BaseDirId
    and i.DisplayPath = left(t.DisplayPath,len(t.DisplayPath)-charindex('\',reverse(t.DisplayPath)))
    )
union all 
select BaseDirID, DisplayPath = left(DisplayPath,len(DisplayPath)-charindex('\',reverse(DisplayPath)))
from cte t
where not exists (
  select 1 
  from t i
  where t.BaseDirId = i.BaseDirId
    and i.DisplayPath = left(t.DisplayPath,len(t.DisplayPath)-charindex('\',reverse(t.DisplayPath)))                                                   
    )
)
select distinct * 
from cte

Demo rextestera:http://rextester.com/CEVGZ96613

zwraca:

+-----------+-----------------+
| BaseDirID |   DisplayPath   |
+-----------+-----------------+
|         1 | A\B             |
|         1 | A\B\C\D         |
|         1 | A\B\F\G         |
|         2 | U\V             |
|         2 | U\V\M\L         |
|         2 | U\V\W\X         |
|         2 | U\V\Z           |
|         2 | U\V\Z\L         |
|         2 | U\V\Z\L\O       |
|         2 | U\V\Z\L\O\Q     |
|         2 | U\V\Z\L\O\Q\R   |
|         2 | U\V\Z\L\O\Q\R\S |
+-----------+-----------------+



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie UDF jako domyślnej wartości kolumny

  2. T-SQL MERGE - sprawdzanie, jakie działanie wykonało

  3. Hierarchia technologii pamięci/magazynowania i SQL Server

  4. Co to jest DATALENGTH() w SQL Server?

  5. Czy SQL Server domyślnie tworzy indeks nieklastrowany we wszystkich kolumnach tabeli?