SQL Server накопительная группировка - PullRequest
1 голос
/ 05 июля 2019

У меня есть таблица со списком файлов и папок, импортированных из CSV-файла.Столбцы таблицы имеют в основном FullName (путь к файлу или папке) и FileExtension.

Я могу получить список всех папок и соответствующее количество файлов в этих папках, используя следующий запрос

SELECT
    SUBSTRING(FullName, 0, LEN(FullName) - CHARINDEX('\', REVERSE(FullName)) + 1) AS RootFolder, 
    COUNT(*) AS FileCount
FROM
    FileDump 
WHERE
    NULLIF(FileExtension, '') IS NOT NULL
GROUP BY
    SUBSTRING(FullName, 0, LEN(FullName) - CHARINDEX('\', REVERSE(FullName)) + 1)
ORDER BY
    FileCount DESC

Однако я хотел бы получить, если в папке есть подпапки ив этих подпапках есть файлы, тогда в число файлов для любой папки также должны входить все эти файлы под

Образцы данных для полного имени

C:\Folder1
C:\Folder1\File1.xlsx
C:\Folder1\File2.xlsx
C:\Folder1\Folder2
C:\Folder1\Folder2\file3.xlsx

Ожидаемый результат

C:\Folder1  - 3
C:\Folder1\Folder2 - 1

1 Ответ

1 голос
/ 05 июля 2019

Один из способов - начать с папок.
Это те, которые не имеют расширения.

Затем левый соединяет файлы и группирует папки для подсчета файлов.

SELECT 
 [folder].FullName AS RootFolder, 
 COUNT([file].FullName) AS FileCount
FROM FileDump AS [folder]
LEFT JOIN FileDump AS [file] 
  ON NULLIF([file].FileExtension, '') IS NOT NULL 
 AND [file].FullName LIKE CONCAT([folder].FullName,'\%')
WHERE NULLIF([folder].FileExtension, '') IS NULL
GROUP BY [folder].FullName
ORDER BY RootFolder;

Результат:

RootFolder          FileCount
------------------  ---------
C:\Folder1          3
C:\Folder1\Folder2  1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...