SQL:如何从递归查询创建 View ?

标签 sql sql-server sql-server-2008 recursion view

问题:我有一个想要从递归查询中派生的 View 。

该查询的结构与此处的查询结构相同: http://forums.asp.net/t/1207101.aspx

并将 TreeView 表示为有序数据集。

如何创建执行此操作的 View :

;WITH Tree (ID, [NAME], PARENT_ID, Depth, Sort) AS
(
    SELECT ID, [NAME], PARENT_ID, 0 AS Depth, CONVERT(varchar(255), [Name]) AS Sort FROM Category
    WHERE PARENT_ID = 0
    UNION ALL
    SELECT CT.ID, CT.[NAME], CT.PARENT_ID, Parent.Depth + 1 AS Depth, 
    CONVERT(varchar(255), Parent.Sort + ' | ' + CT.[NAME]) AS Sort
    FROM Category CT
    INNER JOIN Tree as Parent ON Parent.ID = CT.PARENT_ID
)

-- HERE IS YOUR TREE, Depths gives you the level starting with 0 and Sort is the Name based path
SELECT ID, [NAME], PARENT_ID, Depth, Sort FROM Tree
ORDER BY Sort

最佳答案

它应该像这样简单:

CREATE VIEW YourViewName
AS
    WITH Tree (ID, [NAME], PARENT_ID, Depth, Sort) AS
    (
        SELECT ID, [NAME], PARENT_ID, 0 AS Depth, CONVERT(varchar(255), [Name]) AS Sort         
        FROM Category
        WHERE PARENT_ID = 0
        UNION ALL
        SELECT CT.ID, CT.[NAME], CT.PARENT_ID, Parent.Depth + 1 AS Depth, 
        CONVERT(varchar(255), Parent.Sort + ' | ' + CT.[NAME]) AS Sort
        FROM Category CT
        INNER JOIN Tree as Parent ON Parent.ID = CT.PARENT_ID
    )

    -- HERE IS YOUR TREE, Depths gives you the level starting with 0 and Sort is the Name based path
    SELECT ID, [NAME], PARENT_ID, Depth, Sort FROM Tree
GO

关于SQL:如何从递归查询创建 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3942951/

相关文章:

sql - Microsoft SQL Server Management Studio,是否可以看到设计 View 背后的代码?

sql - SqlConnection 是否并行处理查询?

sql-server-2008 - 如何从 SQL Server 数据库备份中挽救一小部分数据?

SQL XML路径转换结果错误

sql - 在 SQL Server 中计算 XML 中的非空节点数

php - PHP 的 SQL 插入问题

sql-server - Visual Studio 2013 生成错误 : Incompatible versions of SQL Server Data Tools and database runtime components are installed on this computer

sql - 删除具有相同字段值的连续行

mysql - 如何创建带有字符串连接的 SQL 过程?

mysql - 使得主键+常量可以使用索引