使用SQL查询的树状视图 [英] Tree view using SQL Query

查看:145
本文介绍了使用SQL查询的树状视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个区域表,我想要一个树视图(表简单地按树排序)是否可以使用sql查询获得帮助,我尝试使用自连接来做到这一点,但是我没有得到想要的结果.

I have a regions table of which I want a tree view (table simple ordered as tree) is it possible using sql queries help is appreciated, I tried to do it using self joins but i did not get the desired result.

树视图就是这样

个人

  • Div1
    • Zon1
    • Div1
      • Zon1
      • zon2
      • zon3

      根据查尔斯·布雷塔纳(Charles Bretana)的建议,我在下面的查询中尝试了CTE,但没有给我想要的结果.

      as per Charles Bretana suggetion I tried CTE in below query and it did not give me desired result.

      WITH Emp_CTE (id, ParentID, name)
      AS (
      SELECT id, ParentID, name
      FROM eQPortal_Region
      WHERE ParentID=0
      UNION ALL
      SELECT e.id, e.ParentID, e.name
      FROM eQPortal_Region e
      INNER JOIN Emp_CTE ecte ON ecte.id = e.ParentID
      )
      SELECT *
      FROM Emp_CTE
      GO
      

      这是结果..出了什么问题?

      This is the result .. what went wrong ?

      InDiv1

      • Div1
      • Div2
      • Div3
        • Zon3
        • Div1
        • Div2
        • Div3
          • Zon3
          • Zon2
          • zon1

          推荐答案

          这个人 Maulik Dhorajia 完美地回答了这个问题……

          This guy Maulik Dhorajia answers the question perfectly ...

          http://maulikdhorajia.blogspot.com/2012/06/sql-server-using-ctecommon-table.html

          制作查询的副本..

          ;WITH CTECompany
          AS
          (
              SELECT 
              ID, 
              ParentID, 
              Name , 
              0 AS HLevel,
              CAST(RIGHT(REPLICATE('_',5) +  CONVERT(VARCHAR(20),ID),20) AS VARCHAR(MAX)) AS OrderByField
          FROM Region
          WHERE ParentID = 0
          
          UNION ALL
          
          SELECT 
              C.ID, 
              C.ParentID, 
              C.Name , 
              (CTE.HLevel + 1) AS HLevel,
              CTE.OrderByField + CAST(RIGHT(REPLICATE('_',5) +  CONVERT(VARCHAR(20),C.ID),20) AS VARCHAR(MAX)) AS OrderByField
          FROM Region C
          INNER JOIN CTECompany CTE ON CTE.ID = C.ParentID
          WHERE C.ParentID IS NOT NULL
          
          
          )
          
          -- Working Example
          SELECT 
          ID
          , ParentID
          , HLevel
          , Name
          , (REPLICATE( '----' , HLevel ) + Name) AS Hierachy
          FROM CTECompany
          ORDER BY OrderByField
          

          这篇关于使用SQL查询的树状视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆