表结构是 想要得到的效果是   StoreID              StoreName        StoreShortName                         parentID
0      总店                            总店                           0
1      街道口店                          街道口店                  0
8     街道口分店                   光谷店              1
6     光谷店                   鲁磨店                            0
7     光谷分店                           亚贸店                   6
9     武昌总店                      户部巷店               0
10     四门口店                         江边店                9

解决方案 »

  1.   

    这个可以用递归,SQL2005+有效;WITH CTE AS(
    SELECT *,CAST(StoreID AS VARCHAR(8000))[PATH] FROM TB WHERE StoreID=0
    UNION ALL
    SELECT T1.*,T2.[PATH]+'-'+CAST(T1.StoreID AS VARCHAR(10)) FROM TB T1 JOIN CTE T2 ON T1.StoreID<>0 AND T1.parentID=T2.StoreID
    )
    SELECT * FROM CTE ORDER BY [PATH]
      

  2.   


    select  StoreID,StoreName,StoreShortName,parentID
    from t 
    order by StoreName
      

  3.   

    可以建立StoreLevel来维护它的等级!
      

  4.   

    select  (replace(parentid,0,'')+storeid as id,s.* from store s ORDER BY id;select concat(replace(parentid,0,''),storeid) as id,s.* from store s ORDER BY id;
    只针对本问题的解决,还是建议增加级次字段,或者改变编码方式