当前位置: 代码迷 >> Sql Server >> 关于递归sql求解解决方法
  详细解决方案

关于递归sql求解解决方法

热度:5   发布时间:2016-04-24 09:36:12.0
关于递归sql求解
我要把一个单表递归绑定到dropdownlist上,效果类似于这样           市区
                                                                                                                     --市区1
                                                                                                                         --市区1下属1
                                                                                                                     --市区2
                                                                                                                          --市区2下属1
                                                                                                                     --市区3
                                                                                                                         --市区3下属1
                                                                                                                         --市区3下属2
                                                                                                          城镇
                                                                                                                   --千灯古镇
                                                                                                                        --古镇村庄1
                                                                                                                   --周庄古镇
                                                                                                                        --周庄村庄1
                                                                                                                  

WITH tab AS(  SELECT S.*FROM S_Area s,
dbo.f_splitSTR('2be919d6-9b19-4d5f-ac29-546e85b43809,
B3910AD6-FD09-48A5-B6D0-CA6120842414,20864900-71E7-47C8-BDF9-2E1DC4501CFC',',')f
WHERE s.AreaId=f.col 
UNION ALL 
SELECT S_Area.* FROM tab,S_Area WHERE tab.AreaId=S_Area.ParentId )
SELECT AreaId,AName,ASort,ParentId FROM tab
我只会写出上面的这个语句
结果如下 
好像还是错误的, B3910AD6-FD09-48A5-B6D0-CA6120842414 在结果集中没有显示

------解决思路----------------------
单独执行过
SELECT * FROM dbo.f_splitSTR('2be919d6-9b19-4d5f-ac29-546e85b43809,
B3910AD6-FD09-48A5-B6D0-CA6120842414,20864900-71E7-47C8-BDF9-2E1DC4501CFC',',')
这个结果吗
和这个
SELECT S.*FROM S_Area s,
dbo.f_splitSTR('2be919d6-9b19-4d5f-ac29-546e85b43809,
B3910AD6-FD09-48A5-B6D0-CA6120842414,20864900-71E7-47C8-BDF9-2E1DC4501CFC',',')f
WHERE s.AreaId=f.col 

------解决思路----------------------
WITH tab AS(
    SELECT S.*,
           Convert(varchar(max), ROW_NUMBER() OVER(ORDER BY col)) AS path
      FROM S_Area s,
           (-- f_splitSTR() 的结果自己处理一下
            SELECT '2be919d6-9b19-4d5f-ac29-546e85b43809' AS col UNION ALL
            SELECT 'B3910AD6-FD09-48A5-B6D0-CA6120842414' UNION ALL
            SELECT '20864900-71E7-47C8-BDF9-2E1DC4501CFC'
           )f
     WHERE s.AreaId=f.col 
    UNION ALL 
    SELECT S_Area.*,
           tab.path+'\'+Convert(varchar(max),S_Area.ASort)
     FROM tab,S_Area 
    WHERE tab.AreaId=S_Area.ParentId
)
SELECT AreaId,AName,ASort,ParentId
  FROM tab
 ORDER BY path
  相关解决方案