求SQL Server查询:按WorkspaceID分组统计需创建的唯一文件夹总数
SQL Server 查询:按 WorkspaceID 计算需创建的文件夹总数
核心逻辑是将每个完整文件夹路径拆分为所有层级的子路径(比如a\b\c拆分为a、a\b、a\b\c),去重后统计每个WorkspaceID下的唯一子路径数量——每个唯一子路径对应一个需要创建的文件夹,父路径已存在的会被去重,不会重复计数。
以下是高效的实现语句:
WITH RecursivePaths AS ( -- 初始层:提取每个路径的第一个层级子路径 SELECT WorkspaceID, FolderPath, LEFT(FolderPath, CHARINDEX('\', FolderPath + '\') - 1) AS SubPath, STUFF(FolderPath, 1, CHARINDEX('\', FolderPath + '\'), '') AS RemainingPath FROM YourTableName WHERE FolderPath <> '' -- 排除空路径 UNION ALL -- 递归层:生成后续层级的子路径 SELECT rp.WorkspaceID, rp.FolderPath, rp.SubPath + '\' + LEFT(rp.RemainingPath, CHARINDEX('\', rp.RemainingPath + '\') - 1), STUFF(rp.RemainingPath, 1, CHARINDEX('\', rp.RemainingPath + '\'), '') FROM RecursivePaths rp WHERE rp.RemainingPath <> '' -- 剩余路径为空时停止递归 ) -- 按WorkspaceID分组,统计去重后的子路径总数 SELECT WorkspaceID, COUNT(DISTINCT SubPath) AS TotalFoldersToCreate FROM RecursivePaths GROUP BY WorkspaceID;
关键说明
- 递归CTE
RecursivePaths会自动生成每个文件夹路径对应的所有层级子路径,完全覆盖示例中的计数规则 - 使用
COUNT(DISTINCT SubPath)确保每个文件夹只被计数一次,避免父路径重复统计 - 请将语句中的
YourTableName替换为你的实际表名
内容的提问来源于stack exchange,提问作者Himanshu Garg
相关产品推荐
相关产品推荐

