将类别列表转换为类别树表SQL

时间:2017-08-19 13:22:27

标签: sql sql-server tree categories

我有一个看起来像这样的表:

CatID   ParentID
1       0
2       1
3       2
4       3
5       0
6       1
7       2

这是我想要实现的结果:

Cat0   Cat1   Cat2   Cat3   Cat4   Cat5   Cat6   Cat7
1      2      3      4
5      6      7

我该怎么做?我考虑过创建一个临时表,但不知道如何用所需格式填充数据。

有人可以帮忙吗?

带有CatID的表非常长 - 有54K个独特的CatID。

Actual list of CatIDs in excel

1 个答案:

答案 0 :(得分:1)

我想我明白了。您可以使用条件聚合执行此操作:

select max(case when parentid = 0 then catid end) as cat0,
       max(case when parentid = 1 then catid end) as cat1,
       max(case when parentid = 2 then catid end) as cat2,
       . . .
from (select t.*,
             row_number() over (partition by parentid order by catid) as seqnum
      from t
     ) t
group by seqnum;

这是rextester