我有一张表格,其中列出了从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
答案 0 :(得分:1)
一种方法是从文件夹开始。
哪些没有扩展名。
然后左键联接文件并在文件夹上分组以对文件计数。
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