具有父子树层次结构的SQL查询

时间:2015-12-02 10:58:17

标签: sql-server

我有一个数据库表,包含以下数据

Id  Level parentId Name
1   1     0        ĐẤT NÔNG NGHIỆP
2   1     0        ĐẤT PHI NÔNG NGHIỆP
3   1     0        ĐẤT CHƯA SỬ DỤNG
4   2     1        Đất sản xuất nông nghiệp
5   2     1        Đất lâm nghiệp
6   2     1        Đất nuôi trồng thủy sản
7   2     1        Đất nông nghiệp khác
8   2     2        Đất ở (nông thôn / đô thị)
9   2     2        Đất chuyên dùng
10  2     2        Đất sông, ngòi, kênh, rạch, suối và mặt nước chuyên dùng
11  2     2        Đất phi NN khác
12  2     3        Đất chưa xác định mục đích sử dụng
...

我想写一个查询来获取如下数据:

enter image description here

如你所见,我有6个等级。我想得到所有数据,如上面的序列,但所有数据都是同一列。 我尝试搜索并找到了解决方案:[Parent/Child hierarchy tree view 但是我很抱歉,因为我对此并不了解。 我尝试改为:

WITH relation(Id, IdCha, TenMucDichSuDung, [level], [orderSequence])  
AS 
(
    SELECT Id,
           IdCha,
           TenMucDichSuDung,
           0,
           CAST(Id AS VARCHAR(20))
    FROM   NhomMucDichSuDungDat 
    WHERE  IdCha = 0 
    UNION ALL  
    SELECT p.Id,
           p.IdCha,
           r.[level] + 1,
           CAST(
               r.orderSequence + '_' + CAST(p.Id AS VARCHAR) AS VARCHAR(20)
           )
    FROM   NhomMucDichSuDungDat p
           INNER JOIN relation r
                ON  p.IdCha = r.Id
)  

SELECT RIGHT('----------', ([level] * 3)) + TenMucDichSuDung
FROM   relation
ORDER BY
       orderSequence

但是我收到了一个错误:

  

使用UNION,INTERSECT或EXCEPT运算符组合的所有查询都必须   在目标列表中有相同数量的表达式。

每个人都可以帮我这么做吗?

1 个答案:

答案 0 :(得分:0)

当我计算联合查询的列数时,我看到第一个查询返回五列,第二个查询返回四列。这是不允许的。联合查询必须具有相同数量的列,并且数据类型必须兼容。

请参阅:msdn.microsoft.com/de-de/library/ms180026(v=sql.110).aspx