2015-12-02 76 views
-2

我有一个数据库表,用下面的数据与亲子树层次SQL查询

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合并,交叉或EXCEPT运算符必须 在其目标列表中的相同数目的表达式。

大家能帮帮我吗?

+0

请格式化您的文章,以便它是可读的。 – CPMunich

+0

当您比较两个联合查询的SELECT列表中的列数时,您会看到什么? – CPMunich

+1

我得到一个错误,没什么可看的 –

回答

0

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

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

+1

非常感谢。我将回顾sql查询 –

+1

非常感谢@CPMunich,我看到了我的查询,发现了这个问题。 这就是原因,我错过了一个领域。 –